diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2021-03-03 19:23:39 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2021-03-08 15:07:01 +0100 |
commit | f901bec494ae921f36e1066e4380b92888757f0f (patch) | |
tree | a6c11bd896ae5572f72a85b259ad1d587c30a0eb /ext/libxml/tests/bug51903.phpt | |
parent | 5787f91c55a7ebaeb34711d303cfc27f089f58b3 (diff) | |
download | php-git-f901bec494ae921f36e1066e4380b92888757f0f.tar.gz |
Fix #51903: simplexml_load_file() doesn't use HTTP headers
The `encoding` attribute of the XML declaration is optional; it is good
practice to use external encoding information where available if it is
missing. Thus, we check for `charset` info of `Content-Type` headers,
and see whether the encoding is supported.
We cater to trailing parameters and quoted-strings, but not to escaped
backslashes and quotes in quoted-strings, since no known character
encoding contains these anyway.
Co-authored-by: Michael Wallner <mike@php.net>
Closes GH-6747.
Diffstat (limited to 'ext/libxml/tests/bug51903.phpt')
-rw-r--r-- | ext/libxml/tests/bug51903.phpt | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/ext/libxml/tests/bug51903.phpt b/ext/libxml/tests/bug51903.phpt new file mode 100644 index 0000000000..36a4b55704 --- /dev/null +++ b/ext/libxml/tests/bug51903.phpt @@ -0,0 +1,38 @@ +--TEST-- +Bug #51903 (simplexml_load_file() doesn't use HTTP headers) +--SKIPIF-- +<?php +if (!extension_loaded('simplexml')) die('skip simplexml extension not available'); +if (@!include "./ext/standard/tests/http/server.inc") die('skip server.inc not available'); +http_server_skipif('tcp://127.0.0.1:12342'); +?> +--FILE-- +<?php +require "./ext/standard/tests/http/server.inc"; +$responses = [ + "data://text/plain,HTTP/1.1 200 OK\r\n" + . "Content-Type: text/xml; charset=ISO-8859-1\r\n\r\n" + . "<?xml version=\"1.0\"?>\n" + . "<root>\xE4\xF6\xFC</root>\n", + "data://text/plain,HTTP/1.1 200 OK\r\n" + . "Content-Type: text/xml; charset=ISO-8859-1; foo=bar\r\n\r\n" + . "<?xml version=\"1.0\"?>\n" + . "<root>\xE4\xF6\xFC</root>\n", + "data://text/plain,HTTP/1.1 200 OK\r\n" + . "Content-Type: text/xml; charset=\"ISO-8859-1\" ; foo=bar\r\n\r\n" + . "<?xml version=\"1.0\"?>\n" + . "<root>\xE4\xF6\xFC</root>\n", +]; +$pid = http_server('tcp://127.0.0.1:12342', $responses); + +for ($i = 0; $i < count($responses); $i++) { + $sxe = simplexml_load_file('http://127.0.0.1:12342/'); + echo "$sxe\n"; +} + +http_server_kill($pid); +?> +--EXPECT-- +äöü +äöü +äöü |