Coverage for /pythoncovmergedfiles/medio/medio/src/fuzz_rst.py: 64%

58 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-07 06:06 +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 2023 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. 

26 

27import sys 

28import atheris 

29 

30from docutils.parsers.rst import Parser 

31from docutils.frontend import get_default_settings 

32from docutils.utils import new_document 

33from docutils import nodes 

34from docutils import ApplicationError 

35from docutils.parsers.rst import tableparser 

36from docutils.statemachine import StringList, string2lines 

37from docutils.transforms.universal import (SmartQuotes, TestMessages, 

38 Decorations, ExposeInternals, 

39 Messages, FilterMessages, 

40 StripComments, 

41 StripClassesAndElements) 

42 

43 

44def TestOneInput(data): 

45 fdp = atheris.FuzzedDataProvider(data) 

46 parser = Parser() 

47 settings = get_default_settings(Parser) 

48 settings.warning_stream = "" 

49 settings.smart_quotes = fdp.ConsumeBool() 

50 settings.trim_footnote_ref_space = fdp.ConsumeBool() 

51 settings.report = fdp.ConsumeIntInRange(0, 5) 

52 

53 doc = new_document(fdp.ConsumeUnicodeNoSurrogates(64), settings.copy()) 

54 try: 

55 parser.parse(fdp.ConsumeUnicodeNoSurrogates(fdp.ConsumeIntInRange(0, 2048)), doc) 

56 if fdp.ConsumeBool(): 

57 doc.transformer.add_transforms([TestMessages]) 

58 if fdp.ConsumeBool(): 

59 doc.transformer.add_transform(SmartQuotes) 

60 if fdp.ConsumeBool(): 

61 doc.transformer.add_transform(Decorations) 

62 if fdp.ConsumeBool(): 

63 doc.transformer.add_transform(ExposeInternals) 

64 if fdp.ConsumeBool(): 

65 doc.transformer.add_transform(Messages) 

66 if fdp.ConsumeBool(): 

67 doc.transformer.add_transform(FilterMessages) 

68 if fdp.ConsumeBool(): 

69 doc.transformer.add_transform(StripComments) 

70 if fdp.ConsumeBool(): 

71 doc.transformer.add_transform(StripClassesAndElements) 

72 doc.transformer.apply_transforms() 

73 o = doc.pformat() 

74 

75 visitor = nodes.TreeCopyVisitor(doc) 

76 doc.walkabout(visitor) 

77 newtree = visitor.get_tree_copy() 

78 except ApplicationError: 

79 pass 

80 

81 

82def main(): 

83 atheris.instrument_all() 

84 atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) 

85 atheris.Fuzz() 

86 

87 

88if __name__ == "__main__": 

89 main()