Gregory Beaver wrote:
> Hi,
>
> I'm trying to figure out how to test a feature in the phar extension
> that requires the executable test file to be an actual phar archive.
> This would be possible if there was some way to load the --FILE--
> section from an external file. Would anyone object to adding a new
> section to the .phpt format "--FILE_EXTERNAL--" that simply takes a
> relative path to the file to use as the contents for the test?
>
> The attached patch adds this section and also fixes a minor bug in the
> handling of POST_RAW that inserts a spurious \n
Hi again,
After a bit more thought, I revised things. The attached patch is
better - it simply copies the external file and saves it as the
$test_file. I also failed to mention that this is against PHP_5_3, but
obviously could be ported to HEAD pretty much unmodified
Greg
Index: run-tests.php
===================================================================
RCS file: /repository/php-src/run-tests.php,v
retrieving revision 1.226.2.37.2.35.2.10
diff -u -r1.226.2.37.2.35.2.10 run-tests.php
--- run-tests.php 1 Jan 2008 06:15:40 -0000 1.226.2.37.2.35.2.10
+++ run-tests.php 5 Jan 2008 02:49:34 -0000
@@ -1034,7 +1034,7 @@
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 @@
$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 @@
$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;
@@ -1355,12 +1366,15 @@
$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);
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php