Coverage for /pythoncovmergedfiles/medio/medio/src/fuzz_xmlutil.py: 43%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
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 atheris
28import sys
29try:
30 from xml.etree import cElementTree as ET
31except ImportError:
32 from xml.etree import ElementTree as ET
33from xml.etree.ElementTree import ParseError
34with atheris.instrument_imports():
35 from adal.xmlutil import *
37XMLTEMPLATE="""
38<?xml version="1.0"?>
39<%OUTTER%>
40 <%INNER% name="%INNERNAME%">
41 <%LEAF1%>%LEAF1VALUE1%</%LEAF1%>
42 <%LEAF2%>%LEAF2VALUE1%</%LEAF2%>
43 <%LEAF3% name="%LEAF3NAME1%" value="%LEAF3VALUE1%"/>
44 <%LEAF3% name="%LEAF3NAME4%" value="%LEAF3VALUE4%"/>
45 </%INNER%>
46 <%INNER% name="%INNERNAME%">
47 <%LEAF1%>%LEAF1VALUE2%</rank>
48 <%LEAF2%>%LEAF2VALUE2%</year>
49 <%LEAF3% name="%LEAF3NAME2%" value="%LEAF3VALUE2%"/>
50 </%INNER%>
51 <%INNER% name="%INNERNAME%">
52 <%LEAF1%>%LEAF1VALUE3%</%LEAF1%>
53 <%LEAF2%>%LEAF2VALUE3%</%LEAF2%>
54 <%LEAF3% name="%LEAF3NAME3%" value="%LEAF3VALUE3%"/>
55 </%INNER%>
56</%OUTTER%>
57"""
59def generate_sample_xml(fdp):
60 global XMLTEMPLATE
61 xml_string = XMLTEMPLATE
63 replace_tag = ["%OUTTER%","%INNER%","%LEAF1%","%LEAF2%","%LEAF3%"]
64 replace_value = ["%INNERNAME%",
65 "%LEAF1VALUE1%","%LEAF2VALUE1%","%LEAF3NAME1%","%LEAF3VALUE1%",
66 "%LEAF1VALUE2%","%LEAF2VALUE2%","%LEAF3NAME2%","%LEAF3VALUE3%",
67 "%LEAF1VALUE3%","%LEAF2VALUE3%","%LEAF3NAME2%","%LEAF3VALUE4%",
68 "%LEAF3NAME4","%LEAF3VALUE4%"
69 ]
71 for tag in replace_tag+replace_value:
72 xml_string = xml_string.replace(tag,fdp.ConsumeUnicodeNoSurrogates(10))
74 return xml_string
76def TestInput(data):
77 fdp = atheris.FuzzedDataProvider(data)
79 try:
80 expand_q_names(fdp.ConsumeString(100))
81 except IndexError as e:
82 if "Unable to parse XPath string:" not in str(e):
83 raise e
84 except KeyError:
85 return
87 try:
88 dom = ET.fromstring(generate_sample_xml(fdp))
89 except ParseError:
90 return
92 xpath_find(dom,fdp.ConsumeString(30))
93 serialize_node_children(dom)
94 is_element_node(dom)
95 find_element_text(dom)
97def main():
98 atheris.Setup(sys.argv, TestInput, enable_python_coverage=True)
99 atheris.Fuzz()
101if __name__ == "__main__":
102 main()