Пример #1
0
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)
Пример #2
0
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)
Пример #3
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)
            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()

Пример #4
0
            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()