From: Greg Beaver <cellog@php.net>
Date: Sat, 5 Jan 2008 21:05:06 +0000 (+0000)
Subject: implement --FILE_EXTERNAL-- section for using an external file as --FILE--, use CGI... 
X-Git-Tag: RELEASE_1_3_1~420
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f61ba6295aa9445982874a055ff8e9a0f9ecc60b;p=php

implement --FILE_EXTERNAL-- section for using an external file as --FILE--, use CGI for --EXPECTHEADERS--, fix --POST_RAW--
---

diff --git a/run-tests.php b/run-tests.php
index f11ab73f84..b589de9f21 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -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);