summaryrefslogtreecommitdiff
path: root/run-tests.php
diff options
context:
space:
mode:
authorMatteo Beccati <mbeccati@php.net>2014-05-27 11:54:34 +0200
committerMatteo Beccati <mbeccati@php.net>2014-05-27 12:03:38 +0200
commit92d54f81d671f0f14a06fec7bd6f917b085253c6 (patch)
tree99df3d9eac3702d5e5f84b0ad235b3a4ec5ba90d /run-tests.php
parent1696166466e179c361c562f01a14995a09c41ae3 (diff)
downloadphp-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.
Diffstat (limited to 'run-tests.php')
-rwxr-xr-xrun-tests.php3
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);