]> granicus.if.org Git - php/commitdiff
Fixed broken XML junit output due to escaping of CDATA sections
authorMatteo Beccati <mbeccati@php.net>
Tue, 27 May 2014 09:04:48 +0000 (11:04 +0200)
committerMatteo Beccati <mbeccati@php.net>
Tue, 27 May 2014 09:08:03 +0000 (11:08 +0200)
I've removed CDATA and used htmlspecialchars as the output might not be UTF-8 safe, as pointed out by ircmaxell in 26b37f1792dfaf9b0b30f81e492c8f68b9ece571

run-tests.php

index 030e95a6844ccb99e7e24b60d345051d0eb35953..cd57747b2f1b2404956bc2d3e2ec1805773fec3a 100755 (executable)
@@ -1536,7 +1536,7 @@ TEST $file
                                }
 
                                $message = !empty($m[1]) ? $m[1] : '';
-                               junit_mark_test_as('SKIP', $shortname, $tested, null, "<![CDATA[\n$message\n]]>");
+                               junit_mark_test_as('SKIP', $shortname, $tested, null, $message);
                                return 'SKIPPED';
                        }
 
@@ -1561,7 +1561,7 @@ TEST $file
        ) {
                $message = "ext/zlib required";
                show_result('SKIP', $tested, $tested_file, "reason: $message", $temp_filenames);
-               junit_mark_test_as('SKIP', $shortname, $tested, null, "<![CDATA[\n$message\n]]>");
+               junit_mark_test_as('SKIP', $shortname, $tested, null, $message);
                return 'SKIPPED';
        }
 
@@ -2129,7 +2129,7 @@ $output
                $php = $old_php;
        }
        
-       $diff = empty($diff) ? '' : "<![CDATA[\n " . preg_replace('/\e/', '<esc>', $diff) . "\n]]>";
+       $diff = empty($diff) ? '' : preg_replace('/\e/', '<esc>', $diff);
 
        junit_mark_test_as($restype, str_replace($cwd . '/', '', $tested_file), $tested, null, $info, $diff);
 
@@ -2708,6 +2708,7 @@ 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_message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8');
 
     $escaped_test_name = basename($file_name) . ' - ' . htmlspecialchars($test_name, ENT_QUOTES);
     $JUNIT['files'][$file_name]['xml'] = "<testcase classname='$suite' name='$escaped_test_name' time='$time'>\n";
@@ -2724,16 +2725,16 @@ function junit_mark_test_as($type, $file_name, $test_name, $time = null, $messag
                junit_suite_record($suite, 'test_pass');
        } elseif ('BORK' == $type) {
                junit_suite_record($suite, 'test_error');
-               $JUNIT['files'][$file_name]['xml'] .= "<error type='$output_type' message='$message'/>\n";
+               $JUNIT['files'][$file_name]['xml'] .= "<error type='$output_type' message='$escaped_message'/>\n";
        } elseif ('SKIP' == $type) {
                junit_suite_record($suite, 'test_skip');
-               $JUNIT['files'][$file_name]['xml'] .= "<skipped>$message</skipped>\n";
+               $JUNIT['files'][$file_name]['xml'] .= "<skipped>$escaped_message</skipped>\n";
        } elseif('FAIL' == $type) {
                junit_suite_record($suite, 'test_fail');
-               $JUNIT['files'][$file_name]['xml'] .= "<failure type='$output_type' message='$message'>$escaped_details</failure>\n";
+               $JUNIT['files'][$file_name]['xml'] .= "<failure type='$output_type' message='$escaped_message'>$escaped_details</failure>\n";
        } else {
                junit_suite_record($suite, 'test_error');
-               $JUNIT['files'][$file_name]['xml'] .= "<error type='$output_type' message='$message'>$escaped_details</error>\n";
+               $JUNIT['files'][$file_name]['xml'] .= "<error type='$output_type' message='$escaped_message'>$escaped_details</error>\n";
        }
 
        $JUNIT['files'][$file_name]['xml'] .= "</testcase>\n";