3ff201906e
This CL adds fuzzers for the wasm module sections 'types', 'names', 'globals', 'imports', 'function signatures', 'memory', and 'data', one fuzzer per section. No fuzzers are added for the other sections because either there already exists a fuzzer (e.g. wasm-code), or there exist inter-section dependencies. To avoid introducing a bunch executables which would make compilation with make slow, I introduce a single executable 'v8_simple_wasm_section_fuzzer' which calls the fuzzers mentioned above. This executable is run by the trybots and ensures that the fuzzers actually compile. For debugging I introduce commandline parameters which allow to execute the specific fuzzers from 'v8_simple_wasm_section_fuzzer'. R=titzer@chromium.org, jochen@chromium.org, mstarzinger@chromium.org Review-Url: https://codereview.chromium.org/2336603002 Cr-Commit-Position: refs/heads/master@{#39413}
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
# Copyright 2016 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import os
|
|
|
|
from testrunner.local import testsuite
|
|
from testrunner.objects import testcase
|
|
|
|
|
|
class FuzzerVariantGenerator(testsuite.VariantGenerator):
|
|
# Only run the fuzzer with standard variant.
|
|
def FilterVariantsByTest(self, testcase):
|
|
return self.standard_variant
|
|
|
|
def GetFlagSets(self, testcase, variant):
|
|
return testsuite.FAST_VARIANT_FLAGS[variant]
|
|
|
|
|
|
class FuzzerTestSuite(testsuite.TestSuite):
|
|
SUB_TESTS = ( 'json', 'parser', 'regexp', 'wasm', 'wasm_asmjs', 'wasm_code',
|
|
'wasm_data_section', 'wasm_function_sigs_section',
|
|
'wasm_globals_section', 'wasm_imports_section', 'wasm_memory_section',
|
|
'wasm_names_section', 'wasm_types_section' )
|
|
|
|
def __init__(self, name, root):
|
|
super(FuzzerTestSuite, self).__init__(name, root)
|
|
|
|
def ListTests(self, context):
|
|
tests = []
|
|
for subtest in FuzzerTestSuite.SUB_TESTS:
|
|
shell = 'v8_simple_%s_fuzzer' % subtest
|
|
for fname in os.listdir(os.path.join(self.root, subtest)):
|
|
if not os.path.isfile(os.path.join(self.root, subtest, fname)):
|
|
continue
|
|
test = testcase.TestCase(self, '%s/%s' % (subtest, fname),
|
|
override_shell=shell)
|
|
tests.append(test)
|
|
tests.sort()
|
|
return tests
|
|
|
|
def GetFlagsForTestCase(self, testcase, context):
|
|
suite, name = testcase.path.split('/')
|
|
return [os.path.join(self.root, suite, name)]
|
|
|
|
def _VariantGeneratorFactory(self):
|
|
return FuzzerVariantGenerator
|
|
|
|
|
|
def GetSuite(name, root):
|
|
return FuzzerTestSuite(name, root)
|