Bug #79684 [Opn->Nab]: C14N sorts the attributes (incorrectly) when not loaded

From: Date: Tue, 09 Jun 2020 16:29:11 +0000
Subject: Bug #79684 [Opn->Nab]: C14N sorts the attributes (incorrectly) when not loaded
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227382@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79684&edit=1

 ID:                 79684
 Updated by:         cmb@php.net
 Reported by:        and_spam+php_net at rump dot dk
 Summary:            C14N sorts the attributes (incorrectly) when not
                     loaded
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            DOM XML related
 Operating System:   Linux
 PHP Version:        7.3.18
-Assigned To:        
+Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

Just adding the namespace declaration as normal attribute is not
supported.  You should instead create the saml:Assertion element
as node with associated namespace; see <https://3v4l.org/lsIVL>
for the correct code.


Previous Comments:
------------------------------------------------------------------------
[2020-06-09 15:25:40] and_spam+php_net at rump dot dk

Description:
------------
The test script perform the same operation twice but the result (the last two lines) are different
depending on if the XML has been created dynamically or loaded (in this case by storing the
dynamically created XML and (re)loading it).

You may reorder the createAttribute lines as you want but the last two lines will always be the same
- the last line being correct.

Test script:
---------------
$xml = new DOMDocument();

$element = $xml->createElement('saml:Assertion');
$xml_saml_assertion = $xml->appendChild($element);
	
$attribute = $xml->createAttribute('id');
$attribute->value = 'IDCard';
$xml_saml_assertion->appendChild($attribute);
	
$attribute = $xml->createAttribute('xmlns:saml');
$attribute->value = 'urn:oasis:names:tc:SAML:2.0:assertion';
$xml_saml_assertion->appendChild($attribute);
	
$attribute = $xml->createAttribute('Version');
$attribute->value = '2.0';
$xml_saml_assertion->appendChild($attribute);

print("<pre>" . htmlentities($xml->saveXML()) .
"</pre><br>\n");
print("<pre>" . htmlentities($xml->C14N(TRUE)) .
"</pre><br>\n");
$xml->loadXML($xml->saveXML());
print("<pre>" . htmlentities($xml->C14N(TRUE)) .
"</pre><br>\n");

Expected result:
----------------
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
Version="2.0" id="IDCard"></saml:Assertion>



Actual result:
--------------
<saml:Assertion Version="2.0" id="IDCard"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"></saml:Assertion>


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=79684&edit=1


Thread (7 messages)

« previous php.bugs (#227382) next »