diff options
author | Matteo Beccati <mbeccati@php.net> | 2014-05-27 11:54:34 +0200 |
---|---|---|
committer | Matteo Beccati <mbeccati@php.net> | 2014-05-27 12:03:38 +0200 |
commit | 92d54f81d671f0f14a06fec7bd6f917b085253c6 (patch) | |
tree | 99df3d9eac3702d5e5f84b0ad235b3a4ec5ba90d | |
parent | 1696166466e179c361c562f01a14995a09c41ae3 (diff) | |
download | php-git-92d54f81d671f0f14a06fec7bd6f917b085253c6.tar.gz |
Escape non-printable characters in the junit XML output
XML doesn't allow most of the characters < 0x20 and binary output
breaks XML parsers. Such characters are not allowed as entities
either, so the generated entities are escaped in order to be printed
as text.
-rwxr-xr-x | run-tests.php | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/run-tests.php b/run-tests.php index c86ebc8cdd..a2f552cfd4 100755 --- a/run-tests.php +++ b/run-tests.php @@ -2701,6 +2701,9 @@ function junit_mark_test_as($type, $file_name, $test_name, $time = null, $messag junit_suite_record($suite, 'execution_time', $time); $escaped_details = htmlspecialchars($details, ENT_QUOTES, 'UTF-8'); + $escaped_details = preg_replace_callback('/[\0-\x08\x0B\x0C\x0E-\x1F]/', function ($c) { + return sprintf('[[0x%02x]]', ord($c[0])); + }, $escaped_details); $escaped_message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); $escaped_test_name = basename($file_name) . ' - ' . htmlspecialchars($test_name, ENT_QUOTES); |