]> granicus.if.org Git - php/commitdiff
implement --FILE_EXTERNAL-- section for using an external file as --FILE--, use CGI...
authorGreg Beaver <cellog@php.net>
Sat, 5 Jan 2008 21:05:06 +0000 (21:05 +0000)
committerGreg Beaver <cellog@php.net>
Sat, 5 Jan 2008 21:05:06 +0000 (21:05 +0000)
run-tests.php

index f11ab73f8438b321706fb222dc2171c1cebc1a85..b589de9f2198676d2d34f750b1275d3c75cd80b1 100755 (executable)
@@ -1034,7 +1034,7 @@ TEST $file
                if (preg_match('/^--([_A-Z]+)--/', $line, $r)) {
                        $section = $r[1];
                        $section_text[$section] = '';
-                       $secfile = $section == 'FILE' || $section == 'FILEEOF';
+                       $secfile = $section == 'FILE' || $section == 'FILEEOF' || $section == 'FILE_EXTERNAL';
                        $secdone = false;
                        continue;
                }
@@ -1060,7 +1060,7 @@ TEST $file
                        $borked = false;
                }
        } else {
-               if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) != 1) {
+               if (@count($section_text['FILE']) + @count($section_text['FILEEOF']) + @count($section_text['FILE_EXTERNAL']) != 1) {
                        $bork_info = "missing section --FILE--";
                        $borked = true;
                }
@@ -1068,6 +1068,17 @@ TEST $file
                        $section_text['FILE'] = preg_replace("/[\r\n]+$/", '', $section_text['FILEEOF']);
                        unset($section_text['FILEEOF']);
                }
+               if (@count($section_text['FILE_EXTERNAL']) == 1) {
+                       // don't allow tests to retrieve files from anywhere but this subdirectory
+                       $section_text['FILE_EXTERNAL'] = dirname($file) . '/' . trim(str_replace('..', '', $section_text['FILE_EXTERNAL']));
+                       if (@file_exists($section_text['FILE_EXTERNAL'])) {
+                               $section_text['FILE'] = file_get_contents($section_text['FILE_EXTERNAL']);
+                               unset($section_text['FILE_EXTERNAL']);
+                       } else {
+                               $bork_info = "could not load --FILE_EXTERNAL-- " . dirname($file) . '/' . trim($section_text['FILE_EXTERNAL']);
+                               $borked = true;
+                       }
+               }
                if ((@count($section_text['EXPECT']) + @count($section_text['EXPECTF']) + @count($section_text['EXPECTREGEX'])) != 1) {
                        $bork_info = "missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX--";
                        $borked = true;
@@ -1093,7 +1104,7 @@ TEST $file
        $tested = trim($section_text['TEST']);
 
        /* For GET/POST tests, check if cgi sapi is available and if it is, use it. */
-       if (!empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['COOKIE'])) {
+       if (!empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['COOKIE']) || !empty($section_text['EXPECTHEADERS'])) {
                if (isset($php_cgi)) {
                        $old_php = $php;
                        $php = $php_cgi .' -C ';
@@ -1355,12 +1366,15 @@ TEST $file
                $raw_lines = explode("\n", $post);
 
                $request = '';
+               $started = false;
                foreach ($raw_lines as $line) {
                        if (empty($env['CONTENT_TYPE']) && preg_match('/^Content-Type:(.*)/i', $line, $res)) {
                                $env['CONTENT_TYPE'] = trim(str_replace("\r", '', $res[1]));
                                continue;
                        }
-                       $request .= $line . "\n";
+                       if ($started) $request .= "\n";
+                       $started = true;
+                       $request .= $line;
                }
 
                $env['CONTENT_LENGTH'] = strlen($request);