Files
David Carlier 673cb6d7a3 Fix GH-22138: skip libxml/xmlreader tests on non-ASCII paths.
libxml2 2.13+ rejects unencoded non-ASCII bytes in SYSTEM URIs via
xmlBuildURISafe and emits "Can't resolve URI", which breaks four tests
when the source tree lives under a path like "~/下载/". Skip them with
a clear reason on such paths, and loosen the EXPECTF for the two tests
that previously matched only "failed to load" so both libxml2 message
formats are accepted.

close GH-22150
2026-05-29 06:08:36 +01:00

77 lines
1.8 KiB
PHP

--TEST--
XMLReader: accessing empty and non existing attributes
--EXTENSIONS--
xmlreader
--SKIPIF--
<?php
if (preg_match('/[^\x00-\x7F]/', __DIR__)) die('skip path contains non-ASCII characters that libxml URI parser rejects');
?>
--FILE--
<?php
$xmlstring =<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<foo bar=""/>
EOF;
$reader = new XMLReader();
$reader->XML($xmlstring);
$reader->read();
var_dump($reader->getAttribute('bar'));
var_dump($reader->getAttribute('baz'));
$reader->close();
$xmlstring =<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo SYSTEM "012.dtd">
<foo bar=""/>
EOF;
$xmlstring = str_replace('012.dtd', __DIR__.'/012.dtd', $xmlstring);
if (DIRECTORY_SEPARATOR == '\\') {
$xmlstring = str_replace('\\',"/", $xmlstring);
}
$reader = new XMLReader();
$reader->XML($xmlstring);
$reader->setParserProperty(XMLReader::DEFAULTATTRS, true);
while($reader->read() && $reader->nodeType != XMLReader::ELEMENT);
var_dump($reader->getAttribute('bar'));
var_dump($reader->getAttribute('baz'));
$reader->close();
echo "\nUsing URI:\n";
$reader = new XMLReader();
$file = __DIR__ . '/012.xml';
if (DIRECTORY_SEPARATOR == '\\') {
$file = str_replace('\\',"/", $file);
}
$reader->open($file);
//$reader->setParserProperty(XMLReader::DEFAULTATTRS, true);
while($reader->read() && $reader->nodeType != XMLReader::ELEMENT);
var_dump($reader->getAttribute('bar'));
var_dump($reader->getAttribute('baz'));
$reader->close();
$reader = new XMLReader();
$reader->open(__DIR__ . '/012.xml');
$reader->setParserProperty(XMLReader::DEFAULTATTRS, true);
while($reader->read() && $reader->nodeType != XMLReader::ELEMENT);
var_dump($reader->getAttribute('bar'));
var_dump($reader->getAttribute('baz'));
$reader->close();
?>
--EXPECT--
string(0) ""
NULL
string(0) ""
string(0) ""
Using URI:
string(0) ""
NULL
string(0) ""
string(0) ""