Exemple #1
0
    def test_basic(self, mock_sysrandom):
        """Basic test."""
        mock_sysrandom.return_value.randint = lambda x, y: 1337

        input_data = ('[libfuzzer]\n'
                      'max_len=9001\n'
                      'dict=blah.dict\n'
                      'blah=9002\n'
                      'rand=random(1, 100)\n'
                      '[asan]\n'
                      'detect_leaks=0\n'
                      '[msan]\n'
                      'msan_option=1\n'
                      '[ubsan]\n'
                      'ubsan_option=0\n')

        self.fs.CreateFile('/path/blah.options', contents=input_data)
        self.fs.CreateFile('/path/blah.dict', contents=input_data)
        fuzzer_options = options.FuzzerOptions('/path/blah.options')

        fuzzer_arguments = fuzzer_options.get_engine_arguments('libfuzzer')

        self.assertListEqual(sorted(fuzzer_arguments.list()), [
            '-blah=9002', '-dict=/path/blah.dict', '-max_len=9001',
            '-rand=1337'
        ])
        self.assertDictEqual(
            fuzzer_arguments.dict(), {
                'blah': '9002',
                'dict': '/path/blah.dict',
                'max_len': '9001',
                'rand': '1337'
            })
        self.assertDictEqual(fuzzer_options.get_asan_options(),
                             {'detect_leaks': '0'})
        self.assertDictEqual(fuzzer_options.get_msan_options(),
                             {'msan_option': '1'})
        self.assertDictEqual(fuzzer_options.get_ubsan_options(),
                             {'ubsan_option': '0'})
        self.assertEqual(fuzzer_arguments['max_len'], '9001')
        self.assertEqual(fuzzer_arguments.get('max_len', constructor=int),
                         9001)
        self.assertEqual(fuzzer_arguments.get('noexist', constructor=int),
                         None)
Exemple #2
0
    def test_get_libfuzzer_flags(self):
        """Test get_libfuzzer_flags logic."""
        fuzz_target = data_handler.get_fuzz_target('libFuzzer_test_fuzzer')
        context = corpus_pruning_task.Context(
            fuzz_target, [], corpus_pruning_task.Pollination.RANDOM, None)

        runner = corpus_pruning_task.Runner(self.build_dir, context)
        flags = runner.get_libfuzzer_flags()
        expected_default_flags = [
            '-timeout=5', '-rss_limit_mb=2560', '-max_len=5242880',
            '-detect_leaks=1', '-use_value_profile=1'
        ]
        six.assertCountEqual(self, flags, expected_default_flags)

        runner.fuzzer_options = options.FuzzerOptions(
            os.path.join(self.build_dir, 'test_get_libfuzzer_flags.options'))
        flags = runner.get_libfuzzer_flags()
        expected_custom_flags = [
            '-timeout=5', '-rss_limit_mb=2560', '-max_len=1337',
            '-detect_leaks=0', '-use_value_profile=1'
        ]
        six.assertCountEqual(self, flags, expected_custom_flags)