Bug #81351 [Opn]: xml_parse errs, but has no error code, when xmlns isn't a FQDN
| From: | dave dot lampert at rpm6 dot com | Date: | Wed, 11 Aug 2021 19:08:16 +0000 |
| Subject: | Bug #81351 [Opn]: xml_parse errs, but has no error code, when xmlns isn't a FQDN | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-235778@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=81351&edit=1
ID: 81351
User updated by: dave dot lampert at rpm6 dot com
Reported by: dave dot lampert at rpm6 dot com
-Summary: xml_parse errors, but has no error code, when xmlns
isn't a FQDN
+Summary: xml_parse errs, but has no error code, when xmlns
isn't a FQDN
Status: Open
Type: Bug
Package: *XML functions
Operating System: Windows
PHP Version: 8.0.9
Block user comment: N
Private report: N
New Comment:
See also https://paiza.io/projects/YqtMZmN079wvnbHbQcGz_Q
to test it out. It won't fail if you combine the two strings and parse all at once.
Previous Comments:
------------------------------------------------------------------------
[2021-08-11 19:04:56] dave dot lampert at rpm6 dot com
Description:
------------
---
From manual page: https://php.net/function.xml-parse
---
If xml_parse tries to parse XML containing <X xmlns="something">, it sees that
"something" doesn't start with "http://" or
"https://", so xml_parse returns 0; however,
xml_get_error_code also returns 0 ("No error"). This only happens when parsing in
fragments near that bad XML namespace.
Test script:
---------------
<?php
class XMLProcessor
{
public function test()
{
$bad_xmlns = true;
$parser = xml_parser_create_ns('UTF-8');
xml_set_object($parser, $this);
$success = xml_parse($parser, '<?xml version="1.0"
encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><X
xmlns="'.($bad_xmlns ? '' : 'http://').'example.org"><', false);
$code = xml_get_error_code($parser);
$error = xml_error_string($code);
echo "xml_parse returned $success, xml_get_error_code = $code, xml_error_string =
$error\r\n";
$success = xml_parse($parser, 'Y>', false);
$code = xml_get_error_code($parser);
$error = xml_error_string($code);
echo "xml_parse returned $success, xml_get_error_code = $code, xml_error_string =
$error\r\n";
}
}
(new XMLProcessor())->test();
Expected result:
----------------
xml_parse returned 1, xml_get_error_code = 0, xml_error_string = No error
xml_parse returned 0, xml_get_error_code = {some number), xml_error_string = {some description}
Actual result:
--------------
xml_parse returned 1, xml_get_error_code = 0, xml_error_string = No error
xml_parse returned 0, xml_get_error_code = 0, xml_error_string = No error
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=81351&edit=1