def test_js_file(err, filename, data, line=0, context=None, pollutable=False): "Tests a JS file by parsing and analyzing its tokens" if SPIDERMONKEY_INSTALLATION is None or \ err.get_resource("SPIDERMONKEY") is None: # Default value is False return if err.detected_type == PACKAGE_THEME: err.warning( err_id=("testcases_scripting", "test_js_file", "theme_js"), warning="JS run from theme", description="Themes should not contain executable code.", filename=filename, line=line) before_tier = None # Set the tier to 4 (Security Tests) if err is not None: before_tier = err.tier err.set_tier(3) tree = get_tree(data, filename=filename, shell=(err and err.get_resource("SPIDERMONKEY")) or SPIDERMONKEY_INSTALLATION, err=err) if not tree: if before_tier: err.set_tier(before_tier) return # Generate a context if one is not available. if context is None: context = ContextGenerator(data) t = traverser.Traverser(err, filename, line, context=context, is_jsm=filename.endswith(".jsm") or "EXPORTED_SYMBOLS" in data) t.pollutable = pollutable t.run(tree) # Reset the tier so we don't break the world if err is not None: err.set_tier(before_tier)
def test_js_file(err, filename, data, line=0, context=None, pollutable=False): "Tests a JS file by parsing and analyzing its tokens" spidermonkey = err.get_resource("SPIDERMONKEY") if spidermonkey is None: # Default value is False return elif not spidermonkey: spidermonkey = SPIDERMONKEY_INSTALLATION if err.detected_type == PACKAGE_THEME: err.warning(err_id=("testcases_scripting", "test_js_file", "theme_js"), warning="JS run from full theme", description="Themes should not contain executable code.", filename=filename, line=line) before_tier = None # Set the tier to 4 (Security Tests) if err is not None: before_tier = err.tier err.set_tier(3) tree = get_tree(data, filename=filename, shell=spidermonkey, err=err) if not tree: if before_tier: err.set_tier(before_tier) return # Generate a context if one is not available. if context is None: context = ContextGenerator(data) t = traverser.Traverser(err, filename, line, context=context, is_jsm=filename.endswith(".jsm") or "EXPORTED_SYMBOLS" in data) t.pollutable = pollutable t.run(tree) # Reset the tier so we don't break the world if err is not None: err.set_tier(before_tier)
if line == "enable bootstrap\n": err.save_resource("em:bootstrap", True) continue elif line == "disable bootstrap\n": err.save_resource("em:bootstrap", False) continue elif line.startswith(("inspect ", "isglobal ")): actions = {"inspect": lambda wrap: wrap.value if wrap.is_global else wrap.output(), "isglobal": lambda wrap: wrap.is_global} vars = line.split() final_context = trav.contexts[-1] for var in vars[1:]: if var not in final_context.data: print "%s not found." % var continue wrap = final_context.data[var] print actions[vars[0]](wrap) continue tree = spidermonkey.get_tree(line, err) if tree is None: continue tree = tree["body"] for branch in tree: output = trav._traverse_node(branch) if output is not None: print output.output()
trav.debug_level = 0 if line == "enable bootstrap\n": err.save_resource("em:bootstrap", True) continue elif line == "disable bootstrap\n": err.save_resource("em:bootstrap", False) continue elif line.startswith(("inspect ", "isglobal ")): actions = {"inspect": lambda wrap: wrap.value if wrap.is_global else wrap.output(), "isglobal": lambda wrap: wrap.is_global} vars = line.split() final_context = trav.contexts[-1] for var in vars[1:]: if var not in final_context.data: print "%s not found." % var continue wrap = final_context.data[var] print actions[vars[0]](wrap) continue tree = spidermonkey.get_tree(line, err, shell=SPIDERMONKEY_INSTALLATION) if tree is None: continue tree = tree["body"] for branch in tree: output = trav._traverse_node(branch) if output is not None: print output.output()