You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
xml.dom.minidom should raise exception on invalid input #56338
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=Nonecreated_at=<Date2011-05-20.22:02:10.486>labels= ['expert-XML', 'type-bug']
title='Document Object Model API - validation'updated_at=<Date2016-12-23.08:39:36.590>user='https://bugs.python.org/KyleKeating'
I was doing some tests on using this library and I noticed xml elements and attribute names could be created with mal-formed xml because special characters which can break validation are not cleaned or converted from their literal forms. Only the attribute values are cleaned, but not the names.
For example
importxml.domdoc.createElement("p\>\</p\>")
...
will just embed a pair of p tags in the xml result. I thought that the xml spec did not permit <, >, &, \n etc. in the element name or attribute name? Could I get some clarification on this, thanks!
<?xml version="1.0" ?>
<xml>
<element/>
<element01 attribute="script><![CDATA[alert('script!');]]></script
>"/>
<script><![CDATA[alert('script!');]]></script>/>
<new line
attribute-name="new line
"/>
</xml>
KyleKeating commented on Jun 2, 2011
KyleKeatingmannequin
MannequinAuthor
More actions
oops, the first xml element in the output should read "<element00/>" not "<element/>"
just a typo! don't get confused!
jocassid commented on Jul 28, 2013
jocassidmannequin
Mannequin
More actions
I added the line print(str(doc)) after the call to getDomImplementation and verified that the errors that I'm seeing are coming from the xml.dom.minidom implemenation of xml.dom. Checking minidom.py I did not see any validation on the tagName that gets passed to createElement. http://www.w3.org/TR/xml11/#NT-NameStartChar lists the format of allowed names. Attached is a file containing the functions I was working on. My thinking is that if the tagName is not valid a ValueError should be thrown.
My limited understanding is that xml.dom and minidom are supposed to implement particular interfaces. So do these DOM interfaces specify if this validation should be done? If so, this would be a bug. Or is it just a question of whether Python should do extra validation not specified by the underlying DOM API?
xml minidom.py needs extra validation in setAttributes for certain special characters depending on the attribute name. Attribute values cannot have special characters like <,> and cant be nested as described in the example below
script shouldn't be allowed as a value for an attribute and I feel it should throw an exception (Value Exception) and as described above <,> shouldn't be allowed as attributes are more like key-value pairs. Could someone tell me if this is right? If it is, then minidom.py needs this extra level of validation for the same
Fixed in 3.16 by GH-155641. createElement(), createAttribute(), setAttribute() and the other methods taking a name now raise InvalidCharacterErr if it is not a valid XML name, as the DOM requires.
Attribute values are not affected: special characters in them are escaped when the document is serialized.
Activity
KyleKeating commentedon May 20, 2011
I was doing some tests on using this library and I noticed xml elements and attribute names could be created with mal-formed xml because special characters which can break validation are not cleaned or converted from their literal forms. Only the attribute values are cleaned, but not the names.
For example
will just embed a pair of p tags in the xml result. I thought that the xml spec did not permit <, >, &, \n etc. in the element name or attribute name? Could I get some clarification on this, thanks!
terryjreedy commentedon May 28, 2011
I suspect you are right, but do not know the rules, and have never used the module. There is no particular person maintaining xml.dom.X at present.
Could you please fill in the ... after the import to give a complete minimal example that fails? Someone could then test it on 3.2
KyleKeating commentedon Jun 2, 2011
This looks to break pretty good... I did confirm this on 3.0, I'm guessing 3.2 is the same.
<?xml version="1.0" ?>
<xml>
<element/>
<element01 attribute="script><![CDATA[alert('script!');]]></script
>"/>
<script><![CDATA[alert('script!');]]></script>/>
<new line
attribute-name="new line
"/>
</xml>
KyleKeating commentedon Jun 2, 2011
oops, the first xml element in the output should read "<element00/>" not "<element/>"
just a typo! don't get confused!
jocassid commentedon Jul 28, 2013
I added the line print(str(doc)) after the call to getDomImplementation and verified that the errors that I'm seeing are coming from the xml.dom.minidom implemenation of xml.dom. Checking minidom.py I did not see any validation on the tagName that gets passed to createElement. http://www.w3.org/TR/xml11/#NT-NameStartChar lists the format of allowed names. Attached is a file containing the functions I was working on. My thinking is that if the tagName is not valid a ValueError should be thrown.
vadmium commentedon Jan 16, 2016
My limited understanding is that xml.dom and minidom are supposed to implement particular interfaces. So do these DOM interfaces specify if this validation should be done? If so, this would be a bug. Or is it just a question of whether Python should do extra validation not specified by the underlying DOM API?
prodo56 commentedon Dec 23, 2016
xml minidom.py needs extra validation in setAttributes for certain special characters depending on the attribute name. Attribute values cannot have special characters like <,> and cant be nested as described in the example below
script shouldn't be allowed as a value for an attribute and I feel it should throw an exception (Value Exception) and as described above <,> shouldn't be allowed as attributes are more like key-value pairs. Could someone tell me if this is right? If it is, then minidom.py needs this extra level of validation for the same
[-]Document Object Model API - validation[/-][+]xml.dom.minidom should raise exception on invalid input[/+]serhiy-storchaka commentedon Aug 30, 2026
Fixed in 3.16 by GH-155641.
createElement(),createAttribute(),setAttribute()and the other methods taking a name now raiseInvalidCharacterErrif it is not a valid XML name, as the DOM requires.Attribute values are not affected: special characters in them are escaped when the document is serialized.