xml: ensure the stream object is closed in main() (#9695)
* ensure the stream object is closed in main() * add changelog frag * Update plugins/modules/xml.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/modules/xml.py Co-authored-by: Felix Fontein <felix@fontein.de> --------- Co-authored-by: Felix Fontein <felix@fontein.de>pull/9729/head
parent
efe0c464ff
commit
191a4d8f63
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- xml - ensure file descriptor is closed (https://github.com/ansible-collections/community.general/pull/9695).
|
|
@ -920,29 +920,34 @@ def main():
|
|||
elif LooseVersion('.'.join(to_native(f) for f in etree.LXML_VERSION)) < LooseVersion('3.0.0'):
|
||||
module.warn('Using lxml version lower than 3.0.0 does not guarantee predictable element attribute order.')
|
||||
|
||||
# Check if the file exists
|
||||
if xml_string:
|
||||
infile = BytesIO(to_bytes(xml_string, errors='surrogate_or_strict'))
|
||||
elif os.path.isfile(xml_file):
|
||||
infile = open(xml_file, 'rb')
|
||||
else:
|
||||
module.fail_json(msg="The target XML source '%s' does not exist." % xml_file)
|
||||
|
||||
# Parse and evaluate xpath expression
|
||||
if xpath is not None:
|
||||
try:
|
||||
etree.XPath(xpath)
|
||||
except etree.XPathSyntaxError as e:
|
||||
module.fail_json(msg="Syntax error in xpath expression: %s (%s)" % (xpath, e))
|
||||
except etree.XPathEvalError as e:
|
||||
module.fail_json(msg="Evaluation error in xpath expression: %s (%s)" % (xpath, e))
|
||||
|
||||
# Try to parse in the target XML file
|
||||
infile = None
|
||||
try:
|
||||
parser = etree.XMLParser(remove_blank_text=pretty_print, strip_cdata=strip_cdata_tags)
|
||||
doc = etree.parse(infile, parser)
|
||||
except etree.XMLSyntaxError as e:
|
||||
module.fail_json(msg="Error while parsing document: %s (%s)" % (xml_file or 'xml_string', e))
|
||||
# Check if the file exists
|
||||
if xml_string:
|
||||
infile = BytesIO(to_bytes(xml_string, errors='surrogate_or_strict'))
|
||||
elif os.path.isfile(xml_file):
|
||||
infile = open(xml_file, 'rb')
|
||||
else:
|
||||
module.fail_json(msg="The target XML source '%s' does not exist." % xml_file)
|
||||
|
||||
# Parse and evaluate xpath expression
|
||||
if xpath is not None:
|
||||
try:
|
||||
etree.XPath(xpath)
|
||||
except etree.XPathSyntaxError as e:
|
||||
module.fail_json(msg="Syntax error in xpath expression: %s (%s)" % (xpath, e))
|
||||
except etree.XPathEvalError as e:
|
||||
module.fail_json(msg="Evaluation error in xpath expression: %s (%s)" % (xpath, e))
|
||||
|
||||
# Try to parse in the target XML file
|
||||
try:
|
||||
parser = etree.XMLParser(remove_blank_text=pretty_print, strip_cdata=strip_cdata_tags)
|
||||
doc = etree.parse(infile, parser)
|
||||
except etree.XMLSyntaxError as e:
|
||||
module.fail_json(msg="Error while parsing document: %s (%s)" % (xml_file or 'xml_string', e))
|
||||
finally:
|
||||
if infile:
|
||||
infile.close()
|
||||
|
||||
# Ensure we have the original copy to compare
|
||||
global orig_doc
|
||||
|
|
Loading…
Reference in New Issue