Bug #81351 [Opn]: xml_parse errs, but has no error code, when xmlns isn't a FQDN

From: 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

« previous php.bugs (#235778) next »