mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	[3.13] gh-135640: Adds more type checking to ElementTree (GH-135643) (GH-136226)
(cherry picked from commit e0245c789f)
Co-authored-by: Kira <kirawhoprograms@fastmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									d80df8c1a5
								
							
						
					
					
						commit
						1de8fc3e4b
					
				
					 3 changed files with 39 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -218,6 +218,33 @@ class ElementTreeTest(unittest.TestCase):
 | 
			
		|||
    def serialize_check(self, elem, expected):
 | 
			
		||||
        self.assertEqual(serialize(elem), expected)
 | 
			
		||||
 | 
			
		||||
    def test_constructor(self):
 | 
			
		||||
        # Test constructor behavior.
 | 
			
		||||
 | 
			
		||||
        with self.assertRaises(TypeError):
 | 
			
		||||
            tree = ET.ElementTree("")
 | 
			
		||||
        with self.assertRaises(TypeError):
 | 
			
		||||
            tree = ET.ElementTree(ET.ElementTree())
 | 
			
		||||
 | 
			
		||||
    def test_setroot(self):
 | 
			
		||||
        # Test _setroot behavior.
 | 
			
		||||
 | 
			
		||||
        tree = ET.ElementTree()
 | 
			
		||||
        element = ET.Element("tag")
 | 
			
		||||
        tree._setroot(element)
 | 
			
		||||
        self.assertEqual(tree.getroot().tag, "tag")
 | 
			
		||||
        self.assertEqual(tree.getroot(), element)
 | 
			
		||||
 | 
			
		||||
        # Test behavior with an invalid root element
 | 
			
		||||
 | 
			
		||||
        tree = ET.ElementTree()
 | 
			
		||||
        with self.assertRaises(TypeError):
 | 
			
		||||
            tree._setroot("")
 | 
			
		||||
        with self.assertRaises(TypeError):
 | 
			
		||||
            tree._setroot(ET.ElementTree())
 | 
			
		||||
        with self.assertRaises(TypeError):
 | 
			
		||||
            tree._setroot(None)
 | 
			
		||||
 | 
			
		||||
    def test_interface(self):
 | 
			
		||||
        # Test element tree interface.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -523,7 +523,9 @@ class ElementTree:
 | 
			
		|||
 | 
			
		||||
    """
 | 
			
		||||
    def __init__(self, element=None, file=None):
 | 
			
		||||
        # assert element is None or iselement(element)
 | 
			
		||||
        if element is not None and not iselement(element):
 | 
			
		||||
            raise TypeError('expected an Element, not %s' %
 | 
			
		||||
                            type(element).__name__)
 | 
			
		||||
        self._root = element # first node
 | 
			
		||||
        if file:
 | 
			
		||||
            self.parse(file)
 | 
			
		||||
| 
						 | 
				
			
			@ -539,7 +541,9 @@ def _setroot(self, element):
 | 
			
		|||
        with the given element.  Use with care!
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        # assert iselement(element)
 | 
			
		||||
        if not iselement(element):
 | 
			
		||||
            raise TypeError('expected an Element, not %s'
 | 
			
		||||
                            % type(element).__name__)
 | 
			
		||||
        self._root = element
 | 
			
		||||
 | 
			
		||||
    def parse(self, source, parser=None):
 | 
			
		||||
| 
						 | 
				
			
			@ -705,6 +709,8 @@ def write(self, file_or_filename,
 | 
			
		|||
                                    of start/end tags
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        if self._root is None:
 | 
			
		||||
            raise TypeError('ElementTree not initialized')
 | 
			
		||||
        if not method:
 | 
			
		||||
            method = "xml"
 | 
			
		||||
        elif method not in _serialize:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
Address bug where it was possible to call
 | 
			
		||||
:func:`xml.etree.ElementTree.ElementTree.write` on an ElementTree object with
 | 
			
		||||
an invalid root element. This behavior blanked the file passed to ``write``
 | 
			
		||||
if it already existed.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue