Coverage for /pythoncovmergedfiles/medio/medio/src/fuzz_argparse.py: 71%
51 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:13 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:13 +0000
1###### Coverage stub
2import atexit
3import coverage
4cov = coverage.coverage(data_file='.coverage', cover_pylib=True)
5cov.start()
6# Register an exist handler that will print coverage
7def exit_handler():
8 cov.stop()
9 cov.save()
10atexit.register(exit_handler)
11####### End of coverage stub
12#!/usr/bin/python3
13# Copyright 2022 Google LLC
14#
15# Licensed under the Apache License, Version 2.0 (the "License");
16# you may not use this file except in compliance with the License.
17# You may obtain a copy of the License at
18#
19# http://www.apache.org/licenses/LICENSE-2.0
20#
21# Unless required by applicable law or agreed to in writing, software
22# distributed under the License is distributed on an "AS IS" BASIS,
23# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24# See the License for the specific language governing permissions and
25# limitations under the License.
27import sys
28import enum
29import atheris
31from absl import flags
32from absl.flags import _exceptions
33from absl.flags import argparse_flags
35class FuzzEnum(enum.Enum):
36 VAL1 = object()
37 VAL2 = object()
40def TestOneInput(data):
41 """Hits the logic in https://github.com/abseil/abseil-py/tree/main/absl/flags"""
42 fdp = atheris.FuzzedDataProvider(data)
44 def rs(size):
45 return fdp.ConsumeUnicodeNoSurrogates(size)
47 fuzz_flag_values = flags.FlagValues()
48 try:
49 flags.DEFINE_string(rs(256), None, rs(256), flag_values = fuzz_flag_values)
50 except _exceptions.Error:
51 pass
53 try:
54 flags.DEFINE_float(rs(256), 0.0, rs(256), flag_values = fuzz_flag_values)
55 except _exceptions.Error:
56 pass
58 try:
59 flags.DEFINE_enum_class(rs(256), None, FuzzEnum, rs(256), flag_values = fuzz_flag_values)
60 except _exceptions.Error:
61 pass
63 try:
64 flags.DEFINE_integer(rs(256), rs(256), rs(256), flag_values = fuzz_flag_values)
65 except _exceptions.Error:
66 pass
68 command_line_args = []
69 for idx in range(fdp.ConsumeIntInRange(1, 20)):
70 command_line_args.append(rs(256))
72 # Parse it all
73 try:
74 fuzz_flag_values(command_line_args)
75 except _exceptions.Error:
76 pass
79def main():
80 atheris.instrument_all()
81 atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True)
82 atheris.Fuzz()
85if __name__ == "__main__":
86 main()