summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS5
-rwxr-xr-xUPGRADING14
-rw-r--r--UPGRADING.INTERNALS10
-rw-r--r--Zend/acinclude.m42
-rw-r--r--ext/date/lib/parse_date.c2
-rw-r--r--ext/date/lib/parse_date.re2
-rw-r--r--ext/date/tests/bug64157.phpt14
-rw-r--r--ext/filter/logical_filters.c5
-rw-r--r--ext/filter/tests/018.phpt4
-rw-r--r--ext/filter/tests/bug64441.phpt11
-rw-r--r--ext/libxml/tests/bug61367-read.phpt16
-rw-r--r--ext/libxml/tests/bug61367-write.phpt14
-rw-r--r--ext/mbstring/mb_gpc.c6
-rw-r--r--ext/phar/tests/031.phpt4
-rw-r--r--ext/phar/tests/032.phpt4
-rw-r--r--ext/phar/tests/files/phar_oo_test.inc3
-rw-r--r--ext/phar/tests/phar_buildfromdirectory1.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromdirectory2-win.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromdirectory2.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromdirectory3.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromdirectory4.phpt24
-rw-r--r--ext/phar/tests/phar_buildfromdirectory5.phpt24
-rw-r--r--ext/phar/tests/phar_buildfromdirectory6.phpt16
-rw-r--r--ext/phar/tests/phar_buildfromiterator1.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator10.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator2.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator3.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator4.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator5.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator6.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator7.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator8.phpt4
-rw-r--r--ext/phar/tests/phar_buildfromiterator9.phpt4
-rw-r--r--ext/phar/tests/phar_extract.phpt8
-rw-r--r--ext/phar/tests/phar_extract2.phpt22
-rw-r--r--ext/phar/tests/phar_extract3.phpt4
-rw-r--r--ext/phar/tests/phar_oo_001.phpt2
-rw-r--r--ext/phar/tests/phar_oo_001U.phpt2
-rw-r--r--ext/phar/tests/phar_oo_002.phpt20
-rw-r--r--ext/phar/tests/phar_oo_002U.phpt20
-rw-r--r--ext/phar/tests/phar_oo_003.phpt2
-rw-r--r--ext/phar/tests/phar_oo_004.phpt2
-rw-r--r--ext/phar/tests/phar_oo_004U.phpt2
-rw-r--r--ext/phar/tests/phar_oo_005.phpt2
-rw-r--r--ext/phar/tests/phar_oo_005U.phpt2
-rw-r--r--ext/phar/tests/phar_oo_005_5.2.phpt2
-rw-r--r--ext/phar/tests/phar_oo_006.phpt2
-rw-r--r--ext/phar/tests/phar_oo_007.phpt6
-rw-r--r--ext/phar/tests/phar_oo_008.phpt2
-rw-r--r--ext/phar/tests/phar_oo_009.phpt2
-rw-r--r--ext/phar/tests/phar_oo_010.phpt2
-rw-r--r--ext/phar/tests/phar_oo_011.phpt2
-rw-r--r--ext/phar/tests/phar_oo_011b.phpt2
-rw-r--r--ext/phar/tests/phar_oo_012.phpt2
-rw-r--r--ext/phar/tests/phar_oo_012_confirm.phpt2
-rw-r--r--ext/phar/tests/phar_oo_012b.phpt2
-rw-r--r--ext/soap/soap.c59
-rw-r--r--ext/spl/tests/DirectoryIterator_getBasename_basic_test.phpt4
-rw-r--r--ext/spl/tests/DirectoryIterator_getBasename_pass_array.phpt4
-rw-r--r--ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt4
-rw-r--r--ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt4
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_basic.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt6
-rw-r--r--ext/spl/tests/SplFileObject_fputcsv_002.phpt4
-rw-r--r--ext/spl/tests/SplFileObject_fputcsv_error.phpt4
-rw-r--r--ext/spl/tests/dit_006.phpt2
-rw-r--r--ext/sqlite3/config.w322
-rw-r--r--ext/standard/php_fopen_wrapper.c84
-rw-r--r--ext/standard/tests/dir/chdir_basic.phpt24
-rw-r--r--ext/standard/tests/dir/chdir_variation2.phpt58
-rw-r--r--ext/standard/tests/file/bug41655_2.phpt4
-rw-r--r--ext/standard/tests/file/fopen_include_path.inc2
-rw-r--r--ext/standard/tests/file/fopen_variation16.phpt2
-rw-r--r--ext/standard/tests/file/fopen_variation17.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation53.phpt2
-rw-r--r--ext/standard/tests/file/rename_variation1.phpt12
-rw-r--r--ext/standard/tests/file/rename_variation2-win32.phpt18
-rw-r--r--ext/standard/tests/file/rename_variation2.phpt14
-rw-r--r--ext/standard/tests/file/rename_variation3.phpt18
-rw-r--r--ext/standard/tests/file/rename_variation4.phpt12
-rw-r--r--ext/standard/tests/file/rename_variation5.phpt12
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt2
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt4
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt4
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt4
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt4
-rw-r--r--main/SAPI.c116
-rw-r--r--main/SAPI.h10
-rw-r--r--main/fopen_wrappers.c7
-rw-r--r--main/main.c1
-rw-r--r--main/php_content_types.c23
-rw-r--r--main/php_globals.h1
-rw-r--r--main/php_streams.h2
-rw-r--r--main/php_variables.c131
-rw-r--r--sapi/cli/php_cli_server.c3
-rw-r--r--tests/basic/024.phpt28
-rw-r--r--tests/basic/026.phpt15
-rw-r--r--tests/basic/enable_post_data_reading_01.phpt2
-rw-r--r--tests/basic/enable_post_data_reading_02.phpt7
-rw-r--r--tests/basic/enable_post_data_reading_03.phpt2
-rw-r--r--tests/basic/enable_post_data_reading_04.phpt2
-rw-r--r--tests/basic/enable_post_data_reading_05.phpt26
-rw-r--r--tests/basic/enable_post_data_reading_06.phpt271
-rw-r--r--win32/php_inttypes.h305
110 files changed, 1218 insertions, 501 deletions
diff --git a/NEWS b/NEWS
index 64ca9a5df3..540f896fe4 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,11 @@ PHP NEWS
. Made calls from incompatible context issue an E_DEPRECATED warning instead
of E_STRICT (phase 1 of RFC: https://wiki.php.net/rfc/incompat_ctx).
(Gustavo)
+ . Uploads equal or greater than 2GB in size are now accepted.
+ (Ralf Lang, Mike)
+ . Reduced POST data memory usage by 200-300%. Removed INI setting
+ always_populate_raw_post_data and the $HTTP_RAW_POST_DATA global
+ variable. (Mike)
- cURL:
. Implemented FR #65646 (re-enable CURLOPT_FOLLOWLOCATION with open_basedir
diff --git a/UPGRADING b/UPGRADING
index e9fba517d4..f5e7cd0bbd 100755
--- a/UPGRADING
+++ b/UPGRADING
@@ -20,11 +20,23 @@ PHP X.Y UPGRADE NOTES
1. Backward Incompatible Changes
========================================
+- Core:
+ Removed $HTTP_RAW_POST_DATA global variable. Restore backwards compatibility
+ by:
+ <?php
+ global $HTTP_RAW_POST_DATA;
+ if (!isset($HTTP_RAW_POST_DATA)) {
+ $HTTP_ROW_POST_DATA = file_get_contents("php://input");
+ }
+ ?>
========================================
2. New Features
========================================
+- Core:
+ The php://input stream is now re-usable and can be used concurrently with
+ enable_post_data_reading=0.
========================================
2. Changes in SAPI modules
@@ -91,6 +103,8 @@ PHP X.Y UPGRADE NOTES
10. Changes to INI File Handling
========================================
+- Core:
+ Removed always_populate_raw_post_data.
========================================
11. Other Changes
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS
index 7cb5539fc1..90202f00f0 100644
--- a/UPGRADING.INTERNALS
+++ b/UPGRADING.INTERNALS
@@ -5,6 +5,7 @@ UPGRADE NOTES - PHP X.Y
1. Internal API changes
a. Addition of do_operation and compare object handlers
b. return_value_ptr now always available, RETVAL_ZVAL_FAST macros
+ c. POST data handling
2. Build system changes
a. Unix build system changes
@@ -57,6 +58,15 @@ UPGRADE NOTES - PHP X.Y
The macros behave similarly to the non-FAST variants with copy=1 and
dtor=0, but will try to return the zval without making a copy by utilizing
return_value_ptr.
+
+ c. POST data handling
+
+ The sapi_request_info's members post_data, post_data_len and raw_post_data as
+ well as raw_post_data_len have been replaced with a temp PHP stream
+ request_body.
+
+ The recommended way to access raw POST data is to open and use a php://input
+ stream wrapper. It is safe to be used concurrently and more than once.
========================
2. Build system changes
diff --git a/Zend/acinclude.m4 b/Zend/acinclude.m4
index fe3ab63beb..7fa8c99940 100644
--- a/Zend/acinclude.m4
+++ b/Zend/acinclude.m4
@@ -9,7 +9,7 @@ AC_DEFUN([LIBZEND_BISON_CHECK],[
# non-working versions, e.g. "3.0 3.2";
# remove "none" when introducing the first incompatible bison version an
# separate any following additions by spaces
- bison_version_exclude="none"
+ bison_version_exclude="3.0"
# for standalone build of Zend Engine
test -z "$SED" && SED=sed
diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c
index 9428ce3804..0e99e231d6 100644
--- a/ext/date/lib/parse_date.c
+++ b/ext/date/lib/parse_date.c
@@ -25002,7 +25002,7 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
TIMELIB_CHECK_NUMBER;
sec = timelib_get_nr_ex((char **) &ptr, 2, &length);
if (sec == TIMELIB_UNSET || length != 2) {
- add_pbf_error(s, "A two second minute could not be found", string, begin);
+ add_pbf_error(s, "A two digit second could not be found", string, begin);
} else {
s->time->s = sec;
}
diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re
index 7efeb430c3..6d91d9ada9 100644
--- a/ext/date/lib/parse_date.re
+++ b/ext/date/lib/parse_date.re
@@ -2009,7 +2009,7 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
TIMELIB_CHECK_NUMBER;
sec = timelib_get_nr_ex((char **) &ptr, 2, &length);
if (sec == TIMELIB_UNSET || length != 2) {
- add_pbf_error(s, "A two second minute could not be found", string, begin);
+ add_pbf_error(s, "A two digit second could not be found", string, begin);
} else {
s->time->s = sec;
}
diff --git a/ext/date/tests/bug64157.phpt b/ext/date/tests/bug64157.phpt
new file mode 100644
index 0000000000..fb71495430
--- /dev/null
+++ b/ext/date/tests/bug64157.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Test for bug #64157: DateTime::createFromFormat() reports confusing error message
+--CREDITS--
+Boro Sitnikovski <buritomath@yahoo.com>
+--INI--
+date.timezone = UTC
+--FILE--
+<?php
+DateTime::createFromFormat('s', '0');
+$lastErrors = DateTime::getLastErrors();
+print_r($lastErrors['errors'][0]);
+?>
+--EXPECT--
+A two digit second could not be found
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index b8df2183b9..653cce23e6 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -484,10 +484,6 @@ void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
}
s++;
}
-
- if (*(e - 1) == '.') {
- goto bad_url;
- }
}
if (
@@ -718,6 +714,7 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
if (flags & FILTER_FLAG_NO_RES_RANGE) {
if (
(ip[0] == 0) ||
+ (ip[0] == 100 && (ip[1] >= 64 || ip[1] <= 127)) ||
(ip[0] == 128 && ip[1] == 0) ||
(ip[0] == 191 && ip[1] == 255) ||
(ip[0] == 169 && ip[1] == 254) ||
diff --git a/ext/filter/tests/018.phpt b/ext/filter/tests/018.phpt
index af52b2e60d..9c73fc3cfc 100644
--- a/ext/filter/tests/018.phpt
+++ b/ext/filter/tests/018.phpt
@@ -15,6 +15,8 @@ var_dump(filter_var("192.168.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE
var_dump(filter_var("192.0.34.166", FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE));
var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
var_dump(filter_var("192.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("100.0.0.0", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("100.127.255.255", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
var_dump(filter_var("192.0.34.166", FILTER_VALIDATE_IP));
var_dump(filter_var("256.1237.123.1", FILTER_VALIDATE_IP));
var_dump(filter_var("255.255.255.255", FILTER_VALIDATE_IP));
@@ -40,6 +42,8 @@ bool(false)
string(12) "192.0.34.166"
bool(false)
string(9) "192.0.0.1"
+bool(false)
+bool(false)
string(12) "192.0.34.166"
bool(false)
string(15) "255.255.255.255"
diff --git a/ext/filter/tests/bug64441.phpt b/ext/filter/tests/bug64441.phpt
new file mode 100644
index 0000000000..149079ec05
--- /dev/null
+++ b/ext/filter/tests/bug64441.phpt
@@ -0,0 +1,11 @@
+--TEST--
+bug 64441, FILTER_VALIDATE_URL will invalidate a hostname that ended by dot
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var('http://example.com./', FILTER_VALIDATE_URL));
+var_dump(filter_var('http://example.com/', FILTER_VALIDATE_URL));
+--EXPECT--
+string(20) "http://example.com./"
+string(19) "http://example.com/"
diff --git a/ext/libxml/tests/bug61367-read.phpt b/ext/libxml/tests/bug61367-read.phpt
index 75d0006a3f..b4ecaa0324 100644
--- a/ext/libxml/tests/bug61367-read.phpt
+++ b/ext/libxml/tests/bug61367-read.phpt
@@ -32,10 +32,10 @@ XML
}
}
-var_dump(mkdir('test_bug_61367'));
-var_dump(mkdir('test_bug_61367/base'));
-var_dump(file_put_contents('test_bug_61367/bad', 'blah'));
-var_dump(chdir('test_bug_61367/base'));
+var_dump(mkdir('test_bug_61367-read'));
+var_dump(mkdir('test_bug_61367-read/base'));
+var_dump(file_put_contents('test_bug_61367-read/bad', 'blah'));
+var_dump(chdir('test_bug_61367-read/base'));
stream_wrapper_register( 'exploit', 'StreamExploiter' );
$s = fopen( 'exploit://', 'r' );
@@ -43,9 +43,9 @@ $s = fopen( 'exploit://', 'r' );
?>
--CLEAN--
<?php
-unlink('test_bug_61367/bad');
-rmdir('test_bug_61367/base');
-rmdir('test_bug_61367');
+unlink('test_bug_61367-read/bad');
+rmdir('test_bug_61367-read/base');
+rmdir('test_bug_61367-read');
?>
--EXPECTF--
bool(true)
@@ -53,7 +53,7 @@ bool(true)
int(4)
bool(true)
-Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "file:///%s/test_bug_61367/bad" in %s on line %d
+Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "file:///%s/test_bug_61367-read/bad" in %s on line %d
Warning: DOMDocument::loadXML(): Failure to process entity file in Entity, line: 4 in %s on line %d
diff --git a/ext/libxml/tests/bug61367-write.phpt b/ext/libxml/tests/bug61367-write.phpt
index e18b07149a..63e99a8e50 100644
--- a/ext/libxml/tests/bug61367-write.phpt
+++ b/ext/libxml/tests/bug61367-write.phpt
@@ -19,10 +19,10 @@ class StreamExploiter {
}
}
-var_dump(mkdir('test_bug_61367'));
-var_dump(mkdir('test_bug_61367/base'));
-var_dump(file_put_contents('test_bug_61367/bad', 'blah'));
-var_dump(chdir('test_bug_61367/base'));
+var_dump(mkdir('test_bug_61367-write'));
+var_dump(mkdir('test_bug_61367-write/base'));
+var_dump(file_put_contents('test_bug_61367-write/bad', 'blah'));
+var_dump(chdir('test_bug_61367-write/base'));
stream_wrapper_register( 'exploit', 'StreamExploiter' );
$s = fopen( 'exploit://', 'r' );
@@ -30,9 +30,9 @@ $s = fopen( 'exploit://', 'r' );
?>
--CLEAN--
<?php
-@unlink('test_bug_61367/bad');
-rmdir('test_bug_61367/base');
-rmdir('test_bug_61367');
+@unlink('test_bug_61367-write/bad');
+rmdir('test_bug_61367-write/base');
+rmdir('test_bug_61367-write');
?>
--EXPECTF--
bool(true)
diff --git a/ext/mbstring/mb_gpc.c b/ext/mbstring/mb_gpc.c
index 5ecc8f365e..30764dc807 100644
--- a/ext/mbstring/mb_gpc.c
+++ b/ext/mbstring/mb_gpc.c
@@ -364,6 +364,7 @@ SAPI_POST_HANDLER_FUNC(php_mb_post_handler)
{
const mbfl_encoding *detected;
php_mb_encoding_handler_info_t info;
+ char *post_data_str = NULL;
MBSTRG(http_input_identify_post) = NULL;
@@ -376,7 +377,10 @@ SAPI_POST_HANDLER_FUNC(php_mb_post_handler)
info.num_from_encodings = MBSTRG(http_input_list_size);
info.from_language = MBSTRG(language);
- detected = _php_mb_encoding_handler_ex(&info, arg, SG(request_info).post_data TSRMLS_CC);
+ php_stream_rewind(SG(request_info).request_body);
+ php_stream_copy_to_mem(SG(request_info).request_body, &post_data_str, PHP_STREAM_COPY_ALL, 0);
+ detected = _php_mb_encoding_handler_ex(&info, arg, post_data_str TSRMLS_CC);
+ STR_FREE(post_data_str);
MBSTRG(http_input_identify) = detected;
if (detected) {
diff --git a/ext/phar/tests/031.phpt b/ext/phar/tests/031.phpt
index 4d5988621d..d458f068f5 100644
--- a/ext/phar/tests/031.phpt
+++ b/ext/phar/tests/031.phpt
@@ -22,10 +22,10 @@ require $pname;
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/031.phar.php');
__halt_compiler();
?>
--EXPECTF--
string(25) "<?php echo new new class;"
-Parse error: %s in phar://%sphar_oo_test.phar.php/a.php on line %d
+Parse error: %s in phar://%s031.phar.php/a.php on line %d
diff --git a/ext/phar/tests/032.phpt b/ext/phar/tests/032.phpt
index faf3dcbf58..4df6cc32b0 100644
--- a/ext/phar/tests/032.phpt
+++ b/ext/phar/tests/032.phpt
@@ -21,9 +21,9 @@ echo $e->getMessage();
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/032.phar.php');
__halt_compiler();
?>
--EXPECTF--
-phar "%sphar_oo_test.phar.php" does not have a signature===DONE=== \ No newline at end of file
+phar "%s032.phar.php" does not have a signature===DONE=== \ No newline at end of file
diff --git a/ext/phar/tests/files/phar_oo_test.inc b/ext/phar/tests/files/phar_oo_test.inc
index e92b4444c1..45421568de 100644
--- a/ext/phar/tests/files/phar_oo_test.inc
+++ b/ext/phar/tests/files/phar_oo_test.inc
@@ -2,7 +2,8 @@
ini_set('date.timezone', 'GMT');
-$fname = dirname(__FILE__) . '/phar_oo_test.phar.php';
+$tname = basename(current(get_included_files()), ".php");
+$fname = dirname(__FILE__) . "/$tname.phar.php";
$pname = 'phar://' . $fname;
$file = (binary)'<?php include "' . $pname . '/a.php"; __HALT_COMPILER(); ?>';
diff --git a/ext/phar/tests/phar_buildfromdirectory1.phpt b/ext/phar/tests/phar_buildfromdirectory1.phpt
index 63e06fa474..957f246664 100644
--- a/ext/phar/tests/phar_buildfromdirectory1.phpt
+++ b/ext/phar/tests/phar_buildfromdirectory1.phpt
@@ -7,7 +7,7 @@ phar.require_hash=0
phar.readonly=0
--FILE--
<?php
-$phar = new Phar(dirname(__FILE__) . '/buildfromdirectory.phar');
+$phar = new Phar(dirname(__FILE__) . '/buildfromdirectory1.phar');
try {
ini_set('phar.readonly', 1);
$phar->buildFromDirectory(1);
@@ -19,7 +19,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromdirectory.phar');
+unlink(dirname(__FILE__) . '/buildfromdirectory1.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromdirectory2-win.phpt b/ext/phar/tests/phar_buildfromdirectory2-win.phpt
index 9dbcf965e3..5ed890a48b 100644
--- a/ext/phar/tests/phar_buildfromdirectory2-win.phpt
+++ b/ext/phar/tests/phar_buildfromdirectory2-win.phpt
@@ -11,7 +11,7 @@ phar.readonly=0
--FILE--
<?php
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory2.phar');
$phar->buildFromDirectory(1);
} catch (Exception $e) {
var_dump(get_class($e));
@@ -21,7 +21,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromdirectory.phar');
+unlink(dirname(__FILE__) . '/buildfromdirectory2.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromdirectory2.phpt b/ext/phar/tests/phar_buildfromdirectory2.phpt
index 639ff0bd4b..a33e50abbb 100644
--- a/ext/phar/tests/phar_buildfromdirectory2.phpt
+++ b/ext/phar/tests/phar_buildfromdirectory2.phpt
@@ -11,7 +11,7 @@ phar.readonly=0
--FILE--
<?php
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory2.phar');
$phar->buildFromDirectory(1);
} catch (Exception $e) {
var_dump(get_class($e));
@@ -21,7 +21,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromdirectory.phar');
+unlink(dirname(__FILE__) . '/buildfromdirectory2.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromdirectory3.phpt b/ext/phar/tests/phar_buildfromdirectory3.phpt
index 2134cbdb53..921e39593d 100644
--- a/ext/phar/tests/phar_buildfromdirectory3.phpt
+++ b/ext/phar/tests/phar_buildfromdirectory3.phpt
@@ -9,7 +9,7 @@ phar.readonly=0
<?php
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory3.phar');
$phar->buildFromDirectory('files', new stdClass);
} catch (Exception $e) {
var_dump(get_class($e));
@@ -19,7 +19,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromdirectory3.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromdirectory4.phpt b/ext/phar/tests/phar_buildfromdirectory4.phpt
index 683ac4bbc8..5ee2c33871 100644
--- a/ext/phar/tests/phar_buildfromdirectory4.phpt
+++ b/ext/phar/tests/phar_buildfromdirectory4.phpt
@@ -9,14 +9,14 @@ open_basedir=
--FILE--
<?php
-mkdir(dirname(__FILE__).'/testdir');
+mkdir(dirname(__FILE__).'/testdir4');
foreach(range(1, 4) as $i) {
- file_put_contents(dirname(__FILE__)."/testdir/file$i.txt", "some content for file $i");
+ file_put_contents(dirname(__FILE__)."/testdir4/file$i.txt", "some content for file $i");
}
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory.phar');
- $a = $phar->buildFromDirectory(dirname(__FILE__) . '/testdir');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory4.phar');
+ $a = $phar->buildFromDirectory(dirname(__FILE__) . '/testdir4');
asort($a);
var_dump($a);
} catch (Exception $e) {
@@ -24,28 +24,28 @@ try {
echo $e->getMessage() . "\n";
}
-var_dump(file_exists(dirname(__FILE__) . '/buildfromdirectory.phar'));
+var_dump(file_exists(dirname(__FILE__) . '/buildfromdirectory4.phar'));
?>
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromdirectory.phar');
+unlink(dirname(__FILE__) . '/buildfromdirectory4.phar');
foreach(range(1, 4) as $i) {
- unlink(dirname(__FILE__) . "/testdir/file$i.txt");
+ unlink(dirname(__FILE__) . "/testdir4/file$i.txt");
}
-rmdir(dirname(__FILE__) . '/testdir');
+rmdir(dirname(__FILE__) . '/testdir4');
?>
--EXPECTF--
array(4) {
["file1.txt"]=>
- string(%d) "%stestdir%cfile1.txt"
+ string(%d) "%stestdir4%cfile1.txt"
["file2.txt"]=>
- string(%d) "%stestdir%cfile2.txt"
+ string(%d) "%stestdir4%cfile2.txt"
["file3.txt"]=>
- string(%d) "%stestdir%cfile3.txt"
+ string(%d) "%stestdir4%cfile3.txt"
["file4.txt"]=>
- string(%d) "%stestdir%cfile4.txt"
+ string(%d) "%stestdir4%cfile4.txt"
}
bool(true)
===DONE===
diff --git a/ext/phar/tests/phar_buildfromdirectory5.phpt b/ext/phar/tests/phar_buildfromdirectory5.phpt
index 51e5cec691..f20c52ab91 100644
--- a/ext/phar/tests/phar_buildfromdirectory5.phpt
+++ b/ext/phar/tests/phar_buildfromdirectory5.phpt
@@ -8,14 +8,14 @@ phar.readonly=0
--FILE--
<?php
-mkdir(dirname(__FILE__).'/testdir');
+mkdir(dirname(__FILE__).'/testdir5');
foreach(range(1, 4) as $i) {
- file_put_contents(dirname(__FILE__)."/testdir/file$i.txt", "some content for file $i");
+ file_put_contents(dirname(__FILE__)."/testdir5/file$i.txt", "some content for file $i");
}
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory.phar');
- $a = $phar->buildFromDirectory(dirname(__FILE__) . '/testdir', '/\.txt/');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory5.phar');
+ $a = $phar->buildFromDirectory(dirname(__FILE__) . '/testdir5', '/\.txt/');
asort($a);
var_dump($a);
} catch (Exception $e) {
@@ -23,28 +23,28 @@ try {
echo $e->getMessage() . "\n";
}
-var_dump(file_exists(dirname(__FILE__) . '/buildfromdirectory.phar'));
+var_dump(file_exists(dirname(__FILE__) . '/buildfromdirectory5.phar'));
?>
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromdirectory.phar');
+unlink(dirname(__FILE__) . '/buildfromdirectory5.phar');
foreach(range(1, 4) as $i) {
- unlink(dirname(__FILE__) . "/testdir/file$i.txt");
+ unlink(dirname(__FILE__) . "/testdir5/file$i.txt");
}
-rmdir(dirname(__FILE__) . '/testdir');
+rmdir(dirname(__FILE__) . '/testdir5');
?>
--EXPECTF--
array(4) {
["file1.txt"]=>
- string(%d) "%stestdir%cfile1.txt"
+ string(%d) "%stestdir5%cfile1.txt"
["file2.txt"]=>
- string(%d) "%stestdir%cfile2.txt"
+ string(%d) "%stestdir5%cfile2.txt"
["file3.txt"]=>
- string(%d) "%stestdir%cfile3.txt"
+ string(%d) "%stestdir5%cfile3.txt"
["file4.txt"]=>
- string(%d) "%stestdir%cfile4.txt"
+ string(%d) "%stestdir5%cfile4.txt"
}
bool(true)
===DONE===
diff --git a/ext/phar/tests/phar_buildfromdirectory6.phpt b/ext/phar/tests/phar_buildfromdirectory6.phpt
index 99566c1926..5537ebac23 100644
--- a/ext/phar/tests/phar_buildfromdirectory6.phpt
+++ b/ext/phar/tests/phar_buildfromdirectory6.phpt
@@ -8,30 +8,30 @@ phar.readonly=0
--FILE--
<?php
-mkdir(dirname(__FILE__).'/testdir', 0777);
+mkdir(dirname(__FILE__).'/testdir6', 0777);
foreach(range(1, 4) as $i) {
- file_put_contents(dirname(__FILE__)."/testdir/file$i.txt", "some content for file $i");
+ file_put_contents(dirname(__FILE__)."/testdir6/file$i.txt", "some content for file $i");
}
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory.phar');
- var_dump($phar->buildFromDirectory(dirname(__FILE__) . '/testdir', '/\.php$/'));
+ $phar = new Phar(dirname(__FILE__) . '/buildfromdirectory6.phar');
+ var_dump($phar->buildFromDirectory(dirname(__FILE__) . '/testdir6', '/\.php$/'));
} catch (Exception $e) {
var_dump(get_class($e));
echo $e->getMessage() . "\n";
}
-var_dump(file_exists(dirname(__FILE__) . '/buildfromdirectory.phar'));
+var_dump(file_exists(dirname(__FILE__) . '/buildfromdirectory6.phar'));
?>
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromdirectory.phar');
+unlink(dirname(__FILE__) . '/buildfromdirectory6.phar');
foreach(range(1, 4) as $i) {
- unlink(dirname(__FILE__) . "/testdir/file$i.txt");
+ unlink(dirname(__FILE__) . "/testdir6/file$i.txt");
}
-rmdir(dirname(__FILE__) . '/testdir');
+rmdir(dirname(__FILE__) . '/testdir6');
?>
--EXPECT--
array(0) {
diff --git a/ext/phar/tests/phar_buildfromiterator1.phpt b/ext/phar/tests/phar_buildfromiterator1.phpt
index 238ede6cbe..0f656b64f2 100644
--- a/ext/phar/tests/phar_buildfromiterator1.phpt
+++ b/ext/phar/tests/phar_buildfromiterator1.phpt
@@ -7,7 +7,7 @@ phar.require_hash=0
phar.readonly=0
--FILE--
<?php
-$phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+$phar = new Phar(dirname(__FILE__) . '/buildfromiterator1.phar');
try {
ini_set('phar.readonly', 1);
$phar->buildFromIterator(1);
@@ -19,7 +19,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator1.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator10.phpt b/ext/phar/tests/phar_buildfromiterator10.phpt
index 024277ed0a..e6b9c025da 100644
--- a/ext/phar/tests/phar_buildfromiterator10.phpt
+++ b/ext/phar/tests/phar_buildfromiterator10.phpt
@@ -11,7 +11,7 @@ phar.readonly=0
<?php
try {
chdir(dirname(__FILE__));
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator10.phar');
$dir = new RecursiveDirectoryIterator('.');
$iter = new RecursiveIteratorIterator($dir);
$a = $phar->buildFromIterator(new RegexIterator($iter, '/_\d{3}\.phpt$/'), dirname(__FILE__) . DIRECTORY_SEPARATOR);
@@ -25,7 +25,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator10.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator2.phpt b/ext/phar/tests/phar_buildfromiterator2.phpt
index cdc2df1050..e9dd26e9de 100644
--- a/ext/phar/tests/phar_buildfromiterator2.phpt
+++ b/ext/phar/tests/phar_buildfromiterator2.phpt
@@ -8,7 +8,7 @@ phar.readonly=0
--FILE--
<?php
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator2.phar');
$phar->buildFromIterator(new stdClass);
} catch (Exception $e) {
var_dump(get_class($e));
@@ -18,7 +18,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator2.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator3.phpt b/ext/phar/tests/phar_buildfromiterator3.phpt
index 4a3bc7c0a5..1603631278 100644
--- a/ext/phar/tests/phar_buildfromiterator3.phpt
+++ b/ext/phar/tests/phar_buildfromiterator3.phpt
@@ -36,7 +36,7 @@ class myIterator implements Iterator
}
}
try {
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator3.phar');
$phar->buildFromIterator(new myIterator(array()), new stdClass);
} catch (Exception $e) {
var_dump(get_class($e));
@@ -46,7 +46,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator3.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator4.phpt b/ext/phar/tests/phar_buildfromiterator4.phpt
index cd261386d5..9277db562b 100644
--- a/ext/phar/tests/phar_buildfromiterator4.phpt
+++ b/ext/phar/tests/phar_buildfromiterator4.phpt
@@ -37,7 +37,7 @@ class myIterator implements Iterator
}
try {
chdir(dirname(__FILE__));
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator4.phar');
var_dump($phar->buildFromIterator(new myIterator(
array(
'a' => basename(__FILE__, 'php') . 'phpt',
@@ -54,7 +54,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator4.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator5.phpt b/ext/phar/tests/phar_buildfromiterator5.phpt
index 8431c12a7c..b6fafec6f4 100644
--- a/ext/phar/tests/phar_buildfromiterator5.phpt
+++ b/ext/phar/tests/phar_buildfromiterator5.phpt
@@ -37,7 +37,7 @@ class myIterator implements Iterator
}
try {
chdir(dirname(__FILE__));
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator5.phar');
var_dump($phar->buildFromIterator(new myIterator(array('a' => new stdClass))));
} catch (Exception $e) {
var_dump(get_class($e));
@@ -47,7 +47,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator5.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator6.phpt b/ext/phar/tests/phar_buildfromiterator6.phpt
index 9c506c8528..3a315fae4d 100644
--- a/ext/phar/tests/phar_buildfromiterator6.phpt
+++ b/ext/phar/tests/phar_buildfromiterator6.phpt
@@ -37,7 +37,7 @@ class myIterator implements Iterator
}
try {
chdir(dirname(__FILE__));
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator6.phar');
var_dump($phar->buildFromIterator(new myIterator(array(basename(__FILE__, 'php') . 'phpt'))));
} catch (Exception $e) {
var_dump(get_class($e));
@@ -47,7 +47,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator6.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator7.phpt b/ext/phar/tests/phar_buildfromiterator7.phpt
index 2bac4c8269..3dd8fc1b00 100644
--- a/ext/phar/tests/phar_buildfromiterator7.phpt
+++ b/ext/phar/tests/phar_buildfromiterator7.phpt
@@ -37,7 +37,7 @@ class myIterator implements Iterator
}
try {
chdir(dirname(__FILE__));
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator7.phar');
var_dump($phar->buildFromIterator(new myIterator(array('a' => basename(__FILE__, 'php') . '/oopsie/there.phpt'))));
} catch (Exception $e) {
var_dump(get_class($e));
@@ -47,7 +47,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator7.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator8.phpt b/ext/phar/tests/phar_buildfromiterator8.phpt
index bb1b780d75..de37ee8687 100644
--- a/ext/phar/tests/phar_buildfromiterator8.phpt
+++ b/ext/phar/tests/phar_buildfromiterator8.phpt
@@ -8,7 +8,7 @@ phar.readonly=0
<?php
try {
chdir(dirname(__FILE__));
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator8.phar');
$a = $phar->buildFromIterator(new RegexIterator(new DirectoryIterator('.'), '/^\d{0,3}\.phpt\\z|^\.\\z|^\.\.\\z/'), dirname(__FILE__) . DIRECTORY_SEPARATOR);
asort($a);
var_dump($a);
@@ -20,7 +20,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator8.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_buildfromiterator9.phpt b/ext/phar/tests/phar_buildfromiterator9.phpt
index 0b56307545..2c9306b6cc 100644
--- a/ext/phar/tests/phar_buildfromiterator9.phpt
+++ b/ext/phar/tests/phar_buildfromiterator9.phpt
@@ -37,7 +37,7 @@ class myIterator implements Iterator
}
try {
chdir(dirname(__FILE__));
- $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
+ $phar = new Phar(dirname(__FILE__) . '/buildfromiterator9.phar');
var_dump($phar->buildFromIterator(new myIterator(array('a' => $a = fopen(basename(__FILE__, 'php') . 'phpt', 'r')))));
fclose($a);
} catch (Exception $e) {
@@ -48,7 +48,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
+unlink(dirname(__FILE__) . '/buildfromiterator9.phar');
__HALT_COMPILER();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_extract.phpt b/ext/phar/tests/phar_extract.phpt
index 01d65f9091..bc545236fd 100644
--- a/ext/phar/tests/phar_extract.phpt
+++ b/ext/phar/tests/phar_extract.phpt
@@ -38,9 +38,9 @@ var_dump(file_get_contents(dirname(__FILE__) . '/extract1/file1.txt'));
$a->extractTo(dirname(__FILE__) . '/extract1', 'subdir/ectory/file.txt');
var_dump(file_get_contents(dirname(__FILE__) . '/extract1/subdir/ectory/file.txt'));
-$a->extractTo(dirname(__FILE__) . '/extract2', array('file2.txt', 'one/level'));
-var_dump(file_get_contents(dirname(__FILE__) . '/extract2/file2.txt'));
-var_dump(is_dir(dirname(__FILE__) . '/extract2/one/level'));
+$a->extractTo(dirname(__FILE__) . '/extract1-2', array('file2.txt', 'one/level'));
+var_dump(file_get_contents(dirname(__FILE__) . '/extract1-2/file2.txt'));
+var_dump(is_dir(dirname(__FILE__) . '/extract1-2/one/level'));
try {
$a->extractTo(dirname(__FILE__) . '/whatever', 134);
@@ -119,7 +119,7 @@ $e = dirname(__FILE__) . '/extract1/';
@rmdir($e . 'subdir/ectory');
@rmdir($e . 'subdir');
@rmdir($e);
-$e = dirname(__FILE__) . '/extract2/';
+$e = dirname(__FILE__) . '/extract1-2/';
@unlink($e . 'file2.txt');
@rmdir($e . 'one/level');
@rmdir($e . 'one');
diff --git a/ext/phar/tests/phar_extract2.phpt b/ext/phar/tests/phar_extract2.phpt
index cac509f9dc..7de8cee5b0 100644
--- a/ext/phar/tests/phar_extract2.phpt
+++ b/ext/phar/tests/phar_extract2.phpt
@@ -16,14 +16,14 @@ $phar->setAlias('fred');
$phar['file1.txt'] = 'hi';
$phar['file2.txt'] = 'hi2';
$phar['subdir/ectory/file.txt'] = 'hi3';
-$phar->mount($pname . '/mount', __FILE__);
+$phar->mount($pname . '/mount2', __FILE__);
$phar->addEmptyDir('one/level');
-$phar->extractTo(dirname(__FILE__) . '/extract', 'mount');
-$phar->extractTo(dirname(__FILE__) . '/extract');
+$phar->extractTo(dirname(__FILE__) . '/extract2', 'mount2');
+$phar->extractTo(dirname(__FILE__) . '/extract2');
$out = array();
-foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__) . '/extract', 0x00003000), RecursiveIteratorIterator::CHILD_FIRST) as $path => $file) {
+foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__) . '/extract2', 0x00003000), RecursiveIteratorIterator::CHILD_FIRST) as $path => $file) {
$extracted[] = $path;
}
@@ -38,7 +38,7 @@ foreach ($extracted as $out) {
--CLEAN--
<?php
@unlink(dirname(__FILE__) . '/tempmanifest2.phar.php');
-$dir = dirname(__FILE__) . '/extract/';
+$dir = dirname(__FILE__) . '/extract2/';
@unlink($dir . 'file1.txt');
@unlink($dir . 'file2.txt');
@unlink($dir . 'subdir/ectory/file.txt');
@@ -51,10 +51,10 @@ $dir = dirname(__FILE__) . '/extract1/';
@rmdir($dir);
?>
--EXPECTF--
-%sextract%cfile1.txt
-%sextract%cfile2.txt
-%sextract%cone
-%sextract%csubdir
-%sextract%csubdir%cectory
-%sextract%csubdir%cectory%cfile.txt
+%sextract2%cfile1.txt
+%sextract2%cfile2.txt
+%sextract2%cone
+%sextract2%csubdir
+%sextract2%csubdir%cectory
+%sextract2%csubdir%cectory%cfile.txt
===DONE===
diff --git a/ext/phar/tests/phar_extract3.phpt b/ext/phar/tests/phar_extract3.phpt
index df85211a23..475583938b 100644
--- a/ext/phar/tests/phar_extract3.phpt
+++ b/ext/phar/tests/phar_extract3.phpt
@@ -9,7 +9,7 @@ phar.readonly=0
$fname = dirname(__FILE__) . '/files/bogus.zip';
$fname2 = dirname(__FILE__) . '/files/notbogus.zip';
-$extract = dirname(__FILE__) . '/test';
+$extract = dirname(__FILE__) . '/test-extract3';
$phar = new PharData($fname);
@@ -34,7 +34,7 @@ try {
===DONE===
--CLEAN--
<?php
-$dir = dirname(__FILE__) . '/test/';
+$dir = dirname(__FILE__) . '/test-extract3/';
@unlink($dir . 'stuff.txt');
@unlink($dir . 'nonsense.txt');
@rmdir($dir);
diff --git a/ext/phar/tests/phar_oo_001.phpt b/ext/phar/tests/phar_oo_001.phpt
index 7a81bbb4b8..bb4c9d7188 100644
--- a/ext/phar/tests/phar_oo_001.phpt
+++ b/ext/phar/tests/phar_oo_001.phpt
@@ -46,7 +46,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_001.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_001U.phpt b/ext/phar/tests/phar_oo_001U.phpt
index f13ddd4b0b..a21026a5b6 100644
--- a/ext/phar/tests/phar_oo_001U.phpt
+++ b/ext/phar/tests/phar_oo_001U.phpt
@@ -46,7 +46,7 @@ try {
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_001U.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_002.phpt b/ext/phar/tests/phar_oo_002.phpt
index 3754151d42..476cd7d3c2 100644
--- a/ext/phar/tests/phar_oo_002.phpt
+++ b/ext/phar/tests/phar_oo_002.phpt
@@ -50,11 +50,11 @@ foreach(new RecursiveIteratorIterator($phar) as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_002.phar.php');
__halt_compiler();
?>
--EXPECTF--
-string(42) "phar://*/files/phar_oo_test.phar.php%ca.php"
+string(41) "phar://*/files/phar_oo_002.phar.php%ca.php"
string(5) "a.php"
int(32)
string(4) "file"
@@ -67,7 +67,7 @@ bool(false)
int(%d)
int(%d)
int(%d)
-string(38) "phar://*/files/phar_oo_test.phar.php%cb"
+string(37) "phar://*/files/phar_oo_002.phar.php%cb"
string(1) "b"
int(0)
string(3) "dir"
@@ -80,7 +80,7 @@ bool(false)
int(%d)
int(%d)
int(%d)
-string(42) "phar://*/files/phar_oo_test.phar.php%cb.php"
+string(41) "phar://*/files/phar_oo_002.phar.php%cb.php"
string(5) "b.php"
int(32)
string(4) "file"
@@ -93,7 +93,7 @@ bool(false)
int(%d)
int(%d)
int(%d)
-string(42) "phar://*/files/phar_oo_test.phar.php%ce.php"
+string(41) "phar://*/files/phar_oo_002.phar.php%ce.php"
string(5) "e.php"
int(32)
string(4) "file"
@@ -107,31 +107,31 @@ int(%d)
int(%d)
int(%d)
==RECURSIVE==
-string(42) "phar://*/files/phar_oo_test.phar.php%ca.php"
+string(41) "phar://*/files/phar_oo_002.phar.php%ca.php"
string(5) "a.php"
int(32)
bool(false)
NULL
int(0)
-string(44) "phar://*/files/phar_oo_test.phar.php/b%cc.php"
+string(43) "phar://*/files/phar_oo_002.phar.php/b%cc.php"
string(5) "c.php"
int(34)
bool(false)
NULL
int(0)
-string(44) "phar://*/files/phar_oo_test.phar.php/b%cd.php"
+string(43) "phar://*/files/phar_oo_002.phar.php/b%cd.php"
string(5) "d.php"
int(34)
bool(false)
NULL
int(0)
-string(42) "phar://*/files/phar_oo_test.phar.php%cb.php"
+string(41) "phar://*/files/phar_oo_002.phar.php%cb.php"
string(5) "b.php"
int(32)
bool(false)
NULL
int(0)
-string(42) "phar://*/files/phar_oo_test.phar.php%ce.php"
+string(41) "phar://*/files/phar_oo_002.phar.php%ce.php"
string(5) "e.php"
int(32)
bool(false)
diff --git a/ext/phar/tests/phar_oo_002U.phpt b/ext/phar/tests/phar_oo_002U.phpt
index 26d0d68d97..da17152b32 100644
--- a/ext/phar/tests/phar_oo_002U.phpt
+++ b/ext/phar/tests/phar_oo_002U.phpt
@@ -50,11 +50,11 @@ foreach(new RecursiveIteratorIterator($phar) as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_002U.phar.php');
__halt_compiler();
?>
--EXPECTF--
-unicode(42) "phar://*/files/phar_oo_test.phar.php%ca.php"
+unicode(42) "phar://*/files/phar_oo_002.phar.php%ca.php"
string(5) "a.php"
int(32)
unicode(4) "file"
@@ -67,7 +67,7 @@ bool(false)
int(%d)
int(%d)
int(%d)
-unicode(38) "phar://*/files/phar_oo_test.phar.php%cb"
+unicode(38) "phar://*/files/phar_oo_002.phar.php%cb"
string(1) "b"
int(0)
unicode(3) "dir"
@@ -80,7 +80,7 @@ bool(false)
int(%d)
int(%d)
int(%d)
-unicode(42) "phar://*/files/phar_oo_test.phar.php%cb.php"
+unicode(42) "phar://*/files/phar_oo_002.phar.php%cb.php"
string(5) "b.php"
int(32)
unicode(4) "file"
@@ -93,7 +93,7 @@ bool(false)
int(%d)
int(%d)
int(%d)
-unicode(42) "phar://*/files/phar_oo_test.phar.php%ce.php"
+unicode(42) "phar://*/files/phar_oo_002.phar.php%ce.php"
string(5) "e.php"
int(32)
unicode(4) "file"
@@ -107,31 +107,31 @@ int(%d)
int(%d)
int(%d)
==RECURSIVE==
-unicode(42) "phar://*/files/phar_oo_test.phar.php%ca.php"
+unicode(42) "phar://*/files/phar_oo_002.phar.php%ca.php"
unicode(5) "a.php"
int(32)
bool(false)
NULL
int(0)
-unicode(44) "phar://*/files/phar_oo_test.phar.php/b%cc.php"
+unicode(44) "phar://*/files/phar_oo_002.phar.php/b%cc.php"
unicode(5) "c.php"
int(34)
bool(false)
NULL
int(0)
-unicode(44) "phar://*/files/phar_oo_test.phar.php/b%cd.php"
+unicode(44) "phar://*/files/phar_oo_002.phar.php/b%cd.php"
unicode(5) "d.php"
int(34)
bool(false)
NULL
int(0)
-unicode(42) "phar://*/files/phar_oo_test.phar.php%cb.php"
+unicode(42) "phar://*/files/phar_oo_002.phar.php%cb.php"
unicode(5) "b.php"
int(32)
bool(false)
NULL
int(0)
-unicode(42) "phar://*/files/phar_oo_test.phar.php%ce.php"
+unicode(42) "phar://*/files/phar_oo_002.phar.php%ce.php"
unicode(5) "e.php"
int(32)
bool(false)
diff --git a/ext/phar/tests/phar_oo_003.phpt b/ext/phar/tests/phar_oo_003.phpt
index ccaf7c65f8..4395792632 100644
--- a/ext/phar/tests/phar_oo_003.phpt
+++ b/ext/phar/tests/phar_oo_003.phpt
@@ -27,7 +27,7 @@ foreach($phar as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_003.phar.php');
__halt_compiler();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_oo_004.phpt b/ext/phar/tests/phar_oo_004.phpt
index ba67749843..3e4581992e 100644
--- a/ext/phar/tests/phar_oo_004.phpt
+++ b/ext/phar/tests/phar_oo_004.phpt
@@ -78,7 +78,7 @@ foreach($it as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_004.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_004U.phpt b/ext/phar/tests/phar_oo_004U.phpt
index 2762ee3c35..51be9dab2e 100644
--- a/ext/phar/tests/phar_oo_004U.phpt
+++ b/ext/phar/tests/phar_oo_004U.phpt
@@ -78,7 +78,7 @@ foreach($it as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_004U.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_005.phpt b/ext/phar/tests/phar_oo_005.phpt
index cb3f298728..b01231e9c2 100644
--- a/ext/phar/tests/phar_oo_005.phpt
+++ b/ext/phar/tests/phar_oo_005.phpt
@@ -32,7 +32,7 @@ foreach($it as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_005.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_005U.phpt b/ext/phar/tests/phar_oo_005U.phpt
index bcdcb08b0d..9c04b93cef 100644
--- a/ext/phar/tests/phar_oo_005U.phpt
+++ b/ext/phar/tests/phar_oo_005U.phpt
@@ -31,7 +31,7 @@ foreach($it as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_005U.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_005_5.2.phpt b/ext/phar/tests/phar_oo_005_5.2.phpt
index 9e509d94b7..399edb0dd3 100644
--- a/ext/phar/tests/phar_oo_005_5.2.phpt
+++ b/ext/phar/tests/phar_oo_005_5.2.phpt
@@ -31,7 +31,7 @@ foreach($it as $name => $ent)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_005_5.2.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_006.phpt b/ext/phar/tests/phar_oo_006.phpt
index 556c98ce0b..5d1d705206 100644
--- a/ext/phar/tests/phar_oo_006.phpt
+++ b/ext/phar/tests/phar_oo_006.phpt
@@ -38,7 +38,7 @@ echo $phar['b.php']->getFilename() . "\n";
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_006.phar.php');
__halt_compiler();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_oo_007.phpt b/ext/phar/tests/phar_oo_007.phpt
index 788b11f1f8..d0b5aa5eca 100644
--- a/ext/phar/tests/phar_oo_007.phpt
+++ b/ext/phar/tests/phar_oo_007.phpt
@@ -59,11 +59,11 @@ var_dump($f->eof());
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_007.phar.php');
__halt_compiler();
?>
--EXPECTF--
-MyFile::__construct(phar://*/files/phar_oo_test.phar.php/a.php)
+MyFile::__construct(phar://*/files/phar_oo_007.phar.php/a.php)
int(%d)
int(%d)
int(%d)
@@ -79,7 +79,7 @@ int(0)
string(32) "<?php echo "This is a.php\n"; ?>"
int(32)
===AGAIN===
-MyFile::__construct(phar://*/files/phar_oo_test.phar.php/a.php)
+MyFile::__construct(phar://*/files/phar_oo_007.phar.php/a.php)
int(0)
bool(false)
string(32) "<?php echo "This is a.php\n"; ?>"
diff --git a/ext/phar/tests/phar_oo_008.phpt b/ext/phar/tests/phar_oo_008.phpt
index 80d1ece0ca..d95af571b3 100644
--- a/ext/phar/tests/phar_oo_008.phpt
+++ b/ext/phar/tests/phar_oo_008.phpt
@@ -83,7 +83,7 @@ foreach($v as $k => $d)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_008.phar.php');
__halt_compiler();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_oo_009.phpt b/ext/phar/tests/phar_oo_009.phpt
index 6abd03ee30..3c842fabed 100644
--- a/ext/phar/tests/phar_oo_009.phpt
+++ b/ext/phar/tests/phar_oo_009.phpt
@@ -36,7 +36,7 @@ foreach($f as $k => $v)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_009.phar.php');
__halt_compiler();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_oo_010.phpt b/ext/phar/tests/phar_oo_010.phpt
index 1d3ff73242..331d300a8c 100644
--- a/ext/phar/tests/phar_oo_010.phpt
+++ b/ext/phar/tests/phar_oo_010.phpt
@@ -36,7 +36,7 @@ var_dump(isset($phar['b']));
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_010.phar.php');
__halt_compiler();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_oo_011.phpt b/ext/phar/tests/phar_oo_011.phpt
index cfbab702ad..01fa9f01e6 100644
--- a/ext/phar/tests/phar_oo_011.phpt
+++ b/ext/phar/tests/phar_oo_011.phpt
@@ -26,7 +26,7 @@ echo "\n";
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_011.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_011b.phpt b/ext/phar/tests/phar_oo_011b.phpt
index 36d9963a22..34cae0e760 100644
--- a/ext/phar/tests/phar_oo_011b.phpt
+++ b/ext/phar/tests/phar_oo_011b.phpt
@@ -31,7 +31,7 @@ catch (BadMethodCallException $e)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_011b.phar.php');
__halt_compiler();
?>
--EXPECTF--
diff --git a/ext/phar/tests/phar_oo_012.phpt b/ext/phar/tests/phar_oo_012.phpt
index e79ac0960e..b6f9f44b1e 100644
--- a/ext/phar/tests/phar_oo_012.phpt
+++ b/ext/phar/tests/phar_oo_012.phpt
@@ -27,7 +27,7 @@ var_dump(isset($phar['f.php']));
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_012.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_012_confirm.phpt b/ext/phar/tests/phar_oo_012_confirm.phpt
index 58a3be87b3..ce5a58f212 100644
--- a/ext/phar/tests/phar_oo_012_confirm.phpt
+++ b/ext/phar/tests/phar_oo_012_confirm.phpt
@@ -30,7 +30,7 @@ var_dump(isset($phar['f.php']));
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_012_confirm.phar.php');
__halt_compiler();
?>
--EXPECT--
diff --git a/ext/phar/tests/phar_oo_012b.phpt b/ext/phar/tests/phar_oo_012b.phpt
index 80d8ed8dc4..066d3bc068 100644
--- a/ext/phar/tests/phar_oo_012b.phpt
+++ b/ext/phar/tests/phar_oo_012b.phpt
@@ -34,7 +34,7 @@ catch (BadMethodCallException $e)
===DONE===
--CLEAN--
<?php
-unlink(dirname(__FILE__) . '/files/phar_oo_test.phar.php');
+unlink(dirname(__FILE__) . '/files/phar_oo_012b.phar.php');
__halt_compiler();
?>
--EXPECTF--
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index 00e80efbcb..c5900dc645 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -1560,48 +1560,45 @@ PHP_METHOD(SoapServer, handle)
}
if (ZEND_NUM_ARGS() == 0) {
- if (SG(request_info).raw_post_data) {
- char *post_data = SG(request_info).raw_post_data;
- int post_data_length = SG(request_info).raw_post_data_length;
+ if (SG(request_info).request_body && 0 == php_stream_rewind(SG(request_info).request_body)) {
zval **server_vars, **encoding;
+ php_stream_filter *zf = NULL;
zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC);
if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &server_vars) == SUCCESS &&
Z_TYPE_PP(server_vars) == IS_ARRAY &&
zend_hash_find(Z_ARRVAL_PP(server_vars), "HTTP_CONTENT_ENCODING", sizeof("HTTP_CONTENT_ENCODING"), (void **) &encoding)==SUCCESS &&
Z_TYPE_PP(encoding) == IS_STRING) {
- zval func;
- zval retval;
- zval param;
- zval *params[1];
-
- if ((strcmp(Z_STRVAL_PP(encoding),"gzip") == 0 ||
- strcmp(Z_STRVAL_PP(encoding),"x-gzip") == 0) &&
- zend_hash_exists(EG(function_table), "gzinflate", sizeof("gzinflate"))) {
- ZVAL_STRING(&func, "gzinflate", 0);
- params[0] = &param;
- ZVAL_STRINGL(params[0], post_data+10, post_data_length-10, 0);
- INIT_PZVAL(params[0]);
- } else if (strcmp(Z_STRVAL_PP(encoding),"deflate") == 0 &&
- zend_hash_exists(EG(function_table), "gzuncompress", sizeof("gzuncompress"))) {
- ZVAL_STRING(&func, "gzuncompress", 0);
- params[0] = &param;
- ZVAL_STRINGL(params[0], post_data, post_data_length, 0);
- INIT_PZVAL(params[0]);
+
+ if (strcmp(Z_STRVAL_PP(encoding),"gzip") == 0
+ || strcmp(Z_STRVAL_PP(encoding),"x-gzip") == 0
+ || strcmp(Z_STRVAL_PP(encoding),"deflate") == 0
+ ) {
+ zval filter_params;
+
+ INIT_PZVAL(&filter_params);
+ array_init_size(&filter_params, 1);
+ add_assoc_long_ex(&filter_params, ZEND_STRS("window"), 0x2f); /* ANY WBITS */
+
+ zf = php_stream_filter_create("zlib.inflate", &filter_params, 0 TSRMLS_CC);
+ zval_dtor(&filter_params);
+
+ if (zf) {
+ php_stream_filter_append(&SG(request_info).request_body->readfilters, zf);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,"Can't uncompress compressed request");
+ return;
+ }
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING,"Request is compressed with unknown compression '%s'",Z_STRVAL_PP(encoding));
return;
}
- if (call_user_function(CG(function_table), (zval**)NULL, &func, &retval, 1, params TSRMLS_CC) == SUCCESS &&
- Z_TYPE(retval) == IS_STRING) {
- doc_request = soap_xmlParseMemory(Z_STRVAL(retval),Z_STRLEN(retval));
- zval_dtor(&retval);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Can't uncompress compressed request");
- return;
- }
- } else {
- doc_request = soap_xmlParseMemory(post_data, post_data_length);
+ }
+
+ doc_request = soap_xmlParseFile("php://input" TSRMLS_CC);
+
+ if (zf) {
+ php_stream_filter_remove(zf, 1 TSRMLS_CC);
}
} else {
zval_ptr_dtor(&retval);
diff --git a/ext/spl/tests/DirectoryIterator_getBasename_basic_test.phpt b/ext/spl/tests/DirectoryIterator_getBasename_basic_test.phpt
index ed1f473be9..d4f22f68a1 100644
--- a/ext/spl/tests/DirectoryIterator_getBasename_basic_test.phpt
+++ b/ext/spl/tests/DirectoryIterator_getBasename_basic_test.phpt
@@ -4,7 +4,7 @@ DirectoryIterator::getBasename() - Basic Test
PHPNW Testfest 2009 - Adrian Hardy
--FILE--
<?php
- $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename');
+ $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename1');
mkdir($targetDir);
touch($targetDir.DIRECTORY_SEPARATOR.'getBasename_test.txt');
$dir = new DirectoryIterator($targetDir.DIRECTORY_SEPARATOR);
@@ -15,7 +15,7 @@ PHPNW Testfest 2009 - Adrian Hardy
?>
--CLEAN--
<?php
- $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename');
+ $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename1');
unlink($targetDir.DIRECTORY_SEPARATOR.'getBasename_test.txt');
rmdir($targetDir);
?>
diff --git a/ext/spl/tests/DirectoryIterator_getBasename_pass_array.phpt b/ext/spl/tests/DirectoryIterator_getBasename_pass_array.phpt
index b2df8a55c9..ef13520237 100644
--- a/ext/spl/tests/DirectoryIterator_getBasename_pass_array.phpt
+++ b/ext/spl/tests/DirectoryIterator_getBasename_pass_array.phpt
@@ -4,7 +4,7 @@ DirectoryIterator::getBasename() - Pass unexpected array
PHPNW Testfest 2009 - Adrian Hardy
--FILE--
<?php
- $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename');
+ $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename2');
mkdir($targetDir);
touch($targetDir.DIRECTORY_SEPARATOR.'getBasename_test.txt');
$dir = new DirectoryIterator($targetDir.DIRECTORY_SEPARATOR);
@@ -15,7 +15,7 @@ PHPNW Testfest 2009 - Adrian Hardy
?>
--CLEAN--
<?php
- $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename');
+ $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('directoryIterator::getbasename2');
unlink($targetDir.DIRECTORY_SEPARATOR.'getBasename_test.txt');
rmdir($targetDir);
?>
diff --git a/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt b/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt
index f0b2b0182c..f6bc266cb1 100644
--- a/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt
+++ b/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt
@@ -5,7 +5,7 @@ Pawel Krynicki <pawel [dot] krynicki [at] xsolve [dot] pl>
#testfest AmsterdamPHP 2012-06-23
--FILE--
<?php
-$depth0 = "depth0";
+$depth0 = "depth01";
$depth1 = 'depth1';
$depth2 = 'depth2';
$targetDir = __DIR__ . DIRECTORY_SEPARATOR . $depth0 . DIRECTORY_SEPARATOR . $depth1 . DIRECTORY_SEPARATOR . $depth2;
@@ -38,7 +38,7 @@ function rrmdir($dir) {
rmdir($dir);
}
-$targetDir = __DIR__.DIRECTORY_SEPARATOR . "depth0";
+$targetDir = __DIR__.DIRECTORY_SEPARATOR . "depth01";
rrmdir($targetDir);
?>
diff --git a/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt b/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt
index 7b12672e14..6527d84bfe 100644
--- a/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt
+++ b/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt
@@ -5,7 +5,7 @@ Pawel Krynicki <pawel [dot] krynicki [at] xsolve [dot] pl>
#testfest AmsterdamPHP 2012-06-23
--FILE--
<?php
-$depth0 = "depth0";
+$depth0 = "depth02";
$depth1 = "depth1";
$depth2 = "depth2";
$targetDir = __DIR__ . DIRECTORY_SEPARATOR . $depth0 . DIRECTORY_SEPARATOR . $depth1 . DIRECTORY_SEPARATOR . $depth2;
@@ -41,7 +41,7 @@ function rrmdir($dir) {
rmdir($dir);
}
-$targetDir = __DIR__ . DIRECTORY_SEPARATOR . "depth0";
+$targetDir = __DIR__ . DIRECTORY_SEPARATOR . "depth02";
rrmdir($targetDir);
?>
--EXPECTF--
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
index abfe5f235f..84b5403698 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
@@ -2,7 +2,7 @@
SplFileObject::fgetcsv default path
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv1.csv', 'w+');
fputcsv($fp, array(
'field1',
'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
));
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv1.csv');
var_dump($fo->fgetcsv());
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv1.csv');
?>
--EXPECTF--
array(4) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
index 4402d6ca4c..a8125a0257 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
@@ -2,7 +2,7 @@
SplFileObject::fgetcsv with alternative delimiter
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv2.csv', 'w+');
fputcsv($fp, array(
'field1',
'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
), '|');
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv2.csv');
var_dump($fo->fgetcsv('|'));
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv2.csv');
?>
--EXPECTF--
array(4) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
index 64d6514a29..169ded7dc3 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
@@ -2,7 +2,7 @@
SplFileObject::fgetcsv with alternative delimiter
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv3.csv', 'w+');
fputcsv($fp, array(
'field1',
'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
), '|');
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv3.csv');
var_dump($fo->fgetcsv('invalid'));
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv3.csv');
?>
--EXPECTF--
Warning: SplFileObject::fgetcsv(): delimiter must be a character in %s on line %d
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
index efbb5fb685..efe765cbf8 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
@@ -2,7 +2,7 @@
SplFileObject::fgetcsv with alternative delimiter
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv4.csv', 'w+');
fputcsv($fp, array(
'field1',
'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
), ',', '"');
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv4.csv');
var_dump($fo->fgetcsv(',', '"'));
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv4.csv');
?>
--EXPECTF--
array(4) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
index 7487b8353c..f8c14f0e35 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
@@ -2,7 +2,7 @@
SplFileObject::fgetcsv with alternative delimiter
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv5.csv', 'w+');
fputcsv($fp, array(
'field1',
'field2',
@@ -11,12 +11,12 @@ fputcsv($fp, array(
), ',', '"');
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv5.csv');
var_dump($fo->fgetcsv(',', 'invalid'));
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv5.csv');
?>
--EXPECTF--
Warning: SplFileObject::fgetcsv(): enclosure must be a character in %s on line %d
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt
index 1a94532b2b..960f36d63f 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_basic.phpt
@@ -2,16 +2,16 @@
SplFileObject::fgetcsv with alternative delimiter
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv6.csv', 'w+');
fwrite($fp, '"aaa","b""bb","ccc"');
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv6.csv');
var_dump($fo->fgetcsv(',', '"', '"'));
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv6.csv');
?>
--EXPECTF--
array(3) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt
index c628ac043d..69089636c1 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_default.phpt
@@ -2,16 +2,16 @@
SplFileObject::fgetcsv with default escape character
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv7.csv', 'w+');
fwrite($fp, '"aa\"","bb","\"c"');
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv7.csv');
var_dump($fo->fgetcsv());
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv7.csv');
?>
--EXPECTF--
array(3) {
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
index fd90103bfa..b49bcdd13c 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
@@ -2,16 +2,16 @@
SplFileObject::fgetcsv with alternative delimiter
--FILE--
<?php
-$fp = fopen('SplFileObject__fgetcsv.csv', 'w+');
+$fp = fopen('SplFileObject__fgetcsv8.csv', 'w+');
fwrite($fp, '"aaa","b""bb","ccc"');
fclose($fp);
-$fo = new SplFileObject('SplFileObject__fgetcsv.csv');
+$fo = new SplFileObject('SplFileObject__fgetcsv8.csv');
var_dump($fo->fgetcsv(',', '"', 'invalid'));
?>
--CLEAN--
<?php
-unlink('SplFileObject__fgetcsv.csv');
+unlink('SplFileObject__fgetcsv8.csv');
?>
--EXPECTF--
Warning: SplFileObject::fgetcsv(): escape must be a character in %s on line %d
diff --git a/ext/spl/tests/SplFileObject_fputcsv_002.phpt b/ext/spl/tests/SplFileObject_fputcsv_002.phpt
index db174931f7..fdd4112ee6 100644
--- a/ext/spl/tests/SplFileObject_fputcsv_002.phpt
+++ b/ext/spl/tests/SplFileObject_fputcsv_002.phpt
@@ -2,7 +2,7 @@
SplFileObject::fputcsv(): Checking data after calling the function
--FILE--
<?php
-$fo = new SplFileObject(__DIR__ . '/SplFileObject_fputcsv.csv', 'w');
+$fo = new SplFileObject(__DIR__ . '/SplFileObject_fputcsv1.csv', 'w');
$data = array(1, 2, 'foo', 'haha', array(4, 5, 6), 1.3, null);
@@ -12,7 +12,7 @@ var_dump($data);
?>
--CLEAN--
<?php
-$file = __DIR__ . '/SplFileObject_fputcsv.csv';
+$file = __DIR__ . '/SplFileObject_fputcsv1.csv';
unlink($file);
?>
--EXPECTF--
diff --git a/ext/spl/tests/SplFileObject_fputcsv_error.phpt b/ext/spl/tests/SplFileObject_fputcsv_error.phpt
index 8368e4211d..cdee48c874 100644
--- a/ext/spl/tests/SplFileObject_fputcsv_error.phpt
+++ b/ext/spl/tests/SplFileObject_fputcsv_error.phpt
@@ -2,7 +2,7 @@
SplFileObject::fputcsv(): error conditions
--FILE--
<?php
-$fo = new SplFileObject(__DIR__ . '/SplFileObject_fputcsv.csv', 'w');
+$fo = new SplFileObject(__DIR__ . '/SplFileObject_fputcsv2.csv', 'w');
echo "*** Testing error conditions ***\n";
// zero argument
@@ -19,7 +19,7 @@ var_dump( $fo->fputcsv($fields, $delim, $enclosure, $fo) );
echo "Done\n";
--CLEAN--
<?php
-$file = __DIR__ . '/SplFileObject_fputcsv.csv';
+$file = __DIR__ . '/SplFileObject_fputcsv2.csv';
unlink($file);
?>
--EXPECTF--
diff --git a/ext/spl/tests/dit_006.phpt b/ext/spl/tests/dit_006.phpt
index 1e627a20e0..9edbb9f157 100644
--- a/ext/spl/tests/dit_006.phpt
+++ b/ext/spl/tests/dit_006.phpt
@@ -2,7 +2,7 @@
SPL: DirectoryIterator and seek
--FILE--
<?php
-$di = new DirectoryIterator(__DIR__);
+$di = new DirectoryIterator(__DIR__."/..");
$di->seek(2);
$n = 0;
diff --git a/ext/sqlite3/config.w32 b/ext/sqlite3/config.w32
index 01e4625fed..8ddb6b9ac8 100644
--- a/ext/sqlite3/config.w32
+++ b/ext/sqlite3/config.w32
@@ -4,7 +4,7 @@
ARG_WITH("sqlite3", "SQLite 3 support", "no");
if (PHP_SQLITE3 != "no") {
- ADD_FLAG("CFLAGS_SQLITE3", "/D SQLITE_THREADSAFE=" + (PHP_ZTS == "yes" ? "1" : "0") + " /D SQLITE_ENABLE_FTS3=1 /D SQLITE_ENABLE_COLUMN_METADATA=1 /D SQLITE_CORE=1 ");
+ ADD_FLAG("CFLAGS_SQLITE3", "/D SQLITE_THREADSAFE=" + (PHP_ZTS == "yes" ? "1" : "0") + " /D SQLITE_ENABLE_FTS3=1 /D SQLITE_ENABLE_COLUMN_METADATA=1 /D SQLITE_CORE=1 /D SQLITE_API=__declspec(dllexport) ");
EXTENSION("sqlite3", "sqlite3.c", null, "/I" + configure_module_dirname + "/libsqlite /I" + configure_module_dirname);
ADD_SOURCES(configure_module_dirname + "/libsqlite", "sqlite3.c", "sqlite3");
diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c
index 0fb27baacd..76f77ebf7b 100644
--- a/ext/standard/php_fopen_wrapper.c
+++ b/ext/standard/php_fopen_wrapper.c
@@ -63,6 +63,12 @@ php_stream_ops php_stream_output_ops = {
NULL /* set_option */
};
+typedef struct php_stream_input { /* {{{ */
+ php_stream **body_ptr;
+ off_t position;
+} php_stream_input_t;
+/* }}} */
+
static size_t php_stream_input_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC) /* {{{ */
{
return -1;
@@ -71,42 +77,36 @@ static size_t php_stream_input_write(php_stream *stream, const char *buf, size_t
static size_t php_stream_input_read(php_stream *stream, char *buf, size_t count TSRMLS_DC) /* {{{ */
{
- off_t *position = (off_t*)stream->abstract;
- size_t read_bytes = 0;
-
- if (!stream->eof) {
- if (SG(request_info).raw_post_data) { /* data has already been read by a post handler */
- read_bytes = SG(request_info).raw_post_data_length - *position;
- if (read_bytes <= count) {
- stream->eof = 1;
- } else {
- read_bytes = count;
- }
- if (read_bytes) {
- memcpy(buf, SG(request_info).raw_post_data + *position, read_bytes);
- }
- } else if (sapi_module.read_post) {
- read_bytes = sapi_module.read_post(buf, count TSRMLS_CC);
- if (read_bytes <= 0) {
- stream->eof = 1;
- read_bytes = 0;
- }
- /* Increment SG(read_post_bytes) only when something was actually read. */
- SG(read_post_bytes) += read_bytes;
- } else {
- stream->eof = 1;
+ php_stream_input_t *input = stream->abstract;
+ size_t read;
+
+ if (!SG(post_read) && SG(read_post_bytes) < input->position + count) {
+ /* read requested data from SAPI */
+ int read_bytes = sapi_read_post_block(buf, count TSRMLS_CC);
+
+ if (read_bytes > 0) {
+ php_stream_seek(*input->body_ptr, 0, SEEK_END);
+ php_stream_write(*input->body_ptr, buf, read_bytes);
}
}
- *position += read_bytes;
+ php_stream_seek(*input->body_ptr, input->position, SEEK_SET);
+ read = php_stream_read(*input->body_ptr, buf, count);
+
+ if (!read || read == (size_t) -1) {
+ stream->eof = 1;
+ } else {
+ input->position += read;
+ }
- return read_bytes;
+ return read;
}
/* }}} */
static int php_stream_input_close(php_stream *stream, int close_handle TSRMLS_DC) /* {{{ */
{
efree(stream->abstract);
+ stream->abstract = NULL;
return 0;
}
@@ -118,13 +118,27 @@ static int php_stream_input_flush(php_stream *stream TSRMLS_DC) /* {{{ */
}
/* }}} */
+static int php_stream_input_seek(php_stream *stream, off_t offset, int whence, off_t *newoffset TSRMLS_DC) /* {{{ */
+{
+ php_stream *inner = stream->abstract;
+
+ if (inner) {
+ int sought = php_stream_seek(inner, offset, whence);
+ *newoffset = inner->position;
+ return sought;
+ }
+
+ return -1;
+}
+/* }}} */
+
php_stream_ops php_stream_input_ops = {
php_stream_input_write,
php_stream_input_read,
php_stream_input_close,
php_stream_input_flush,
"Input",
- NULL, /* seek */
+ php_stream_input_seek,
NULL, /* cast */
NULL, /* stat */
NULL /* set_option */
@@ -204,13 +218,23 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, const char *pa
}
if (!strcasecmp(path, "input")) {
+ php_stream_input_t *input;
+
if ((options & STREAM_OPEN_FOR_INCLUDE) && !PG(allow_url_include) ) {
if (options & REPORT_ERRORS) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "URL file-access is disabled in the server configuration");
}
return NULL;
}
- return php_stream_alloc(&php_stream_input_ops, ecalloc(1, sizeof(off_t)), 0, "rb");
+
+ input = ecalloc(1, sizeof(*input));
+ if (*(input->body_ptr = &SG(request_info).request_body)) {
+ php_stream_rewind(*input->body_ptr);
+ } else {
+ *input->body_ptr = php_stream_temp_create(TEMP_STREAM_DEFAULT, SAPI_POST_BLOCK_SIZE);
+ }
+
+ return php_stream_alloc(&php_stream_input_ops, input, 0, "rb");
}
if (!strcasecmp(path, "stdin")) {
@@ -259,8 +283,8 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, const char *pa
fd = dup(STDERR_FILENO);
}
} else if (!strncasecmp(path, "fd/", 3)) {
- char *start,
- *end;
+ const char *start;
+ char *end;
long fildes_ori;
int dtablesize;
diff --git a/ext/standard/tests/dir/chdir_basic.phpt b/ext/standard/tests/dir/chdir_basic.phpt
index 5fc0e5b886..81d3c7c9d1 100644
--- a/ext/standard/tests/dir/chdir_basic.phpt
+++ b/ext/standard/tests/dir/chdir_basic.phpt
@@ -14,40 +14,40 @@ Test chdir() function : basic functionality
echo "*** Testing chdir() : basic functionality ***\n";
$base_dir_path = dirname(__FILE__);
-$level_one_dir_name = "level_one";
-$level_one_dir_path = "$base_dir_path/$level_one_dir_name";
+$level1_one_dir_name = "level1_one";
+$level1_one_dir_path = "$base_dir_path/$level1_one_dir_name";
-$level_two_dir_name = "level_two";
-$level_two_dir_path = "$base_dir_path/$level_one_dir_name/$level_two_dir_name";
+$level1_two_dir_name = "level1_two";
+$level1_two_dir_path = "$base_dir_path/$level1_one_dir_name/$level1_two_dir_name";
// create directories
-mkdir($level_one_dir_path);
-mkdir($level_two_dir_path);
+mkdir($level1_one_dir_path);
+mkdir($level1_two_dir_path);
echo "\n-- Testing chdir() with absolute path: --\n";
chdir($base_dir_path);
-var_dump(chdir($level_one_dir_path));
+var_dump(chdir($level1_one_dir_path));
var_dump(getcwd());
echo "\n-- Testing chdir() with relative paths: --\n";
-var_dump(chdir($level_two_dir_name));
+var_dump(chdir($level1_two_dir_name));
var_dump(getcwd());
?>
===DONE===
--CLEAN--
<?php
$file_path = dirname(__FILE__);
-rmdir("$file_path/level_one/level_two");
-rmdir("$file_path/level_one");
+rmdir("$file_path/level1_one/level1_two");
+rmdir("$file_path/level1_one");
?>
--EXPECTF--
*** Testing chdir() : basic functionality ***
-- Testing chdir() with absolute path: --
bool(true)
-string(%d) "%slevel_one"
+string(%d) "%slevel1_one"
-- Testing chdir() with relative paths: --
bool(true)
-string(%d) "%slevel_one%elevel_two"
+string(%d) "%slevel1_one%elevel1_two"
===DONE===
diff --git a/ext/standard/tests/dir/chdir_variation2.phpt b/ext/standard/tests/dir/chdir_variation2.phpt
index fa70f9e104..9ca6a97748 100644
--- a/ext/standard/tests/dir/chdir_variation2.phpt
+++ b/ext/standard/tests/dir/chdir_variation2.phpt
@@ -15,32 +15,32 @@ echo "*** Testing chdir() : usage variations ***\n";
$base_dir_path = dirname(__FILE__);
-$level_one_dir_name = "level_one";
-$level_one_dir_path = "$base_dir_path/$level_one_dir_name";
+$level2_one_dir_name = "level2_one";
+$level2_one_dir_path = "$base_dir_path/$level2_one_dir_name";
-$level_two_dir_name = "level_two";
-$level_two_dir_path = "$base_dir_path/$level_one_dir_name/$level_two_dir_name";
+$level2_two_dir_name = "level2_two";
+$level2_two_dir_path = "$base_dir_path/$level2_one_dir_name/$level2_two_dir_name";
// create directories
-mkdir($level_one_dir_path);
-mkdir($level_two_dir_path);
+mkdir($level2_one_dir_path);
+mkdir($level2_two_dir_path);
-echo "\n-- \$directory = './level_one': --\n";
+echo "\n-- \$directory = './level2_one': --\n";
var_dump(chdir($base_dir_path));
-var_dump(chdir("./$level_one_dir_name"));
+var_dump(chdir("./$level2_one_dir_name"));
var_dump(getcwd());
-echo "\n-- \$directory = 'level_one/level_two': --\n";
+echo "\n-- \$directory = 'level2_one/level2_two': --\n";
var_dump(chdir($base_dir_path));
-var_dump(chdir("$level_one_dir_name/$level_two_dir_name"));
+var_dump(chdir("$level2_one_dir_name/$level2_two_dir_name"));
var_dump(getcwd());
echo "\n-- \$directory = '..': --\n";
var_dump(chdir('..'));
var_dump(getcwd());
-echo "\n-- \$directory = 'level_two', '.': --\n";
-var_dump(chdir($level_two_dir_path));
+echo "\n-- \$directory = 'level2_two', '.': --\n";
+var_dump(chdir($level2_two_dir_path));
var_dump(chdir('.'));
var_dump(getcwd());
@@ -49,13 +49,13 @@ var_dump(chdir('../'));
var_dump(getcwd());
echo "\n-- \$directory = './': --\n";
-var_dump(chdir($level_two_dir_path));
+var_dump(chdir($level2_two_dir_path));
var_dump(chdir('./'));
var_dump(getcwd());
-echo "\n-- \$directory = '../../'level_one': --\n";
-var_dump(chdir($level_two_dir_path));
-var_dump(chdir("../../$level_one_dir_name"));
+echo "\n-- \$directory = '../../'level2_one': --\n";
+var_dump(chdir($level2_two_dir_path));
+var_dump(chdir("../../$level2_one_dir_name"));
var_dump(getcwd());
?>
@@ -63,42 +63,42 @@ var_dump(getcwd());
--CLEAN--
<?php
$file_path = dirname(__FILE__);
-rmdir("$file_path/level_one/level_two");
-rmdir("$file_path/level_one");
+rmdir("$file_path/level2_one/level2_two");
+rmdir("$file_path/level2_one");
?>
--EXPECTF--
*** Testing chdir() : usage variations ***
--- $directory = './level_one': --
+-- $directory = './level2_one': --
bool(true)
bool(true)
-string(%d) "%slevel_one"
+string(%d) "%slevel2_one"
--- $directory = 'level_one/level_two': --
+-- $directory = 'level2_one/level2_two': --
bool(true)
bool(true)
-string(%d) "%slevel_one%elevel_two"
+string(%d) "%slevel2_one%elevel2_two"
-- $directory = '..': --
bool(true)
-string(%d) "%slevel_one"
+string(%d) "%slevel2_one"
--- $directory = 'level_two', '.': --
+-- $directory = 'level2_two', '.': --
bool(true)
bool(true)
-string(%d) "%slevel_one%elevel_two"
+string(%d) "%slevel2_one%elevel2_two"
-- $directory = '../': --
bool(true)
-string(%d) "%slevel_one"
+string(%d) "%slevel2_one"
-- $directory = './': --
bool(true)
bool(true)
-string(%d) "%slevel_one%elevel_two"
+string(%d) "%slevel2_one%elevel2_two"
--- $directory = '../../'level_one': --
+-- $directory = '../../'level2_one': --
bool(true)
bool(true)
-string(%d) "%slevel_one"
+string(%d) "%slevel2_one"
===DONE===
diff --git a/ext/standard/tests/file/bug41655_2.phpt b/ext/standard/tests/file/bug41655_2.phpt
index d406f1ba04..96f5cc86f0 100644
--- a/ext/standard/tests/file/bug41655_2.phpt
+++ b/ext/standard/tests/file/bug41655_2.phpt
@@ -5,11 +5,13 @@ open_basedir=/
--FILE--
<?php
$dir = dirname(__FILE__);
- $a=glob($dir . "/test.*");
+ $a=glob($dir . "/test*csv");
print_r($a);
?>
--EXPECTF--
Array
(
[0] => %stest.csv
+ [1] => %stest2.csv
+ [2] => %stest3.csv
)
diff --git a/ext/standard/tests/file/fopen_include_path.inc b/ext/standard/tests/file/fopen_include_path.inc
index 7d6723a815..5bc9b6ce3b 100644
--- a/ext/standard/tests/file/fopen_include_path.inc
+++ b/ext/standard/tests/file/fopen_include_path.inc
@@ -1,6 +1,6 @@
<?php
$pwd = getcwd();
-$f = basename(__FILE__);
+$f = basename(current(get_included_files()), ".php");
$dir1 = $pwd."/".$f.".dir1";
$dir2 = $pwd."/".$f.".dir2";
$dir3 = $pwd."/".$f.".dir3";
diff --git a/ext/standard/tests/file/fopen_variation16.phpt b/ext/standard/tests/file/fopen_variation16.phpt
index 3f220aa7c0..e14f2e1c16 100644
--- a/ext/standard/tests/file/fopen_variation16.phpt
+++ b/ext/standard/tests/file/fopen_variation16.phpt
@@ -32,7 +32,7 @@ rmdir($thisTestDir);
function runtest() {
global $dir1;
- $extraDir = "extraDir";
+ $extraDir = "extraDir16";
mkdir($dir1.'/'.$extraDir);
mkdir($extraDir);
diff --git a/ext/standard/tests/file/fopen_variation17.phpt b/ext/standard/tests/file/fopen_variation17.phpt
index bc75c11c90..8abae0fbe5 100644
--- a/ext/standard/tests/file/fopen_variation17.phpt
+++ b/ext/standard/tests/file/fopen_variation17.phpt
@@ -32,7 +32,7 @@ rmdir($thisTestDir);
function runtest() {
global $dir1;
- $extraDir = "extraDir";
+ $extraDir = "extraDir17";
mkdir($dir1.'/'.$extraDir);
mkdir($extraDir);
diff --git a/ext/standard/tests/file/fscanf_variation53.phpt b/ext/standard/tests/file/fscanf_variation53.phpt
index b65bccf8fd..a553a96693 100644
--- a/ext/standard/tests/file/fscanf_variation53.phpt
+++ b/ext/standard/tests/file/fscanf_variation53.phpt
@@ -30,7 +30,7 @@ $counter = 1;
foreach($modes as $mode) {
// create an empty file
- $filename = "$file_path/fscanf_variation52.tmp";
+ $filename = "$file_path/fscanf_variation53.tmp";
$file_handle = fopen($filename, "w");
if($file_handle == false)
exit("Error:failed to open file $filename");
diff --git a/ext/standard/tests/file/rename_variation1.phpt b/ext/standard/tests/file/rename_variation1.phpt
index 0f7321e205..54338d7460 100644
--- a/ext/standard/tests/file/rename_variation1.phpt
+++ b/ext/standard/tests/file/rename_variation1.phpt
@@ -16,16 +16,16 @@ $file_path = dirname(__FILE__);
echo "\n*** Testing rename() : renaming directory across directories ***\n";
$src_dirs = array (
/* Testing simple directory tree */
- "$file_path/rename_variation/",
+ "$file_path/rename_variation1/",
/* Testing a dir with trailing slash */
- "$file_path/rename_variation/",
+ "$file_path/rename_variation1/",
/* Testing dir with double trailing slashes */
- "$file_path//rename_variation//",
+ "$file_path//rename_variation1//",
);
-$dest_dir = "$file_path/rename_variation_dir";
+$dest_dir = "$file_path/rename_variation1_dir";
// create the $dest_dir
mkdir($dest_dir);
@@ -35,7 +35,7 @@ foreach($src_dirs as $src_dir) {
echo "-- Iteration $counter --\n";
// create the src dir
- mkdir("$file_path/rename_variation/");
+ mkdir("$file_path/rename_variation1/");
// rename the src dir to a new dir in dest dir
var_dump( rename($src_dir, $dest_dir."/new_dir") );
// ensure that dir was renamed
@@ -52,7 +52,7 @@ echo "Done\n";
--CLEAN--
<?php
$file_path = dirname(__FILE__);
-rmdir($file_path."/rename_variation_dir");
+rmdir($file_path."/rename_variation1_dir");
?>
--EXPECTF--
*** Testing rename() : renaming directory across directories ***
diff --git a/ext/standard/tests/file/rename_variation2-win32.phpt b/ext/standard/tests/file/rename_variation2-win32.phpt
index 87f4e7ddb1..9627a9fa53 100644
--- a/ext/standard/tests/file/rename_variation2-win32.phpt
+++ b/ext/standard/tests/file/rename_variation2-win32.phpt
@@ -15,27 +15,27 @@ if (substr(PHP_OS, 0, 3) != 'WIN') {
require dirname(__FILE__).'/file.inc';
$file_path = dirname(__FILE__);
-mkdir("$file_path/rename_variation_dir");
+mkdir("$file_path/rename_variation2_dir");
/* Renaming a file and directory to numeric name */
echo "\n*** Testing rename() by renaming a file and directory to numeric name ***\n";
-$fp = fopen($file_path."/rename_variation.tmp", "w");
+$fp = fopen($file_path."/rename_variation2.tmp", "w");
fclose($fp);
// renaming existing file to numeric name
-var_dump( rename($file_path."/rename_variation.tmp", $file_path."/12345") );
+var_dump( rename($file_path."/rename_variation2.tmp", $file_path."/12345") );
// ensure that rename worked fine
-var_dump( file_exists($file_path."/rename_variation.tmp" ) ); // expecting false
+var_dump( file_exists($file_path."/rename_variation2.tmp" ) ); // expecting false
var_dump( file_exists($file_path."/12345" ) ); // expecting true
unlink($file_path."/12345");
// renaming a directory to numeric name
-var_dump( rename($file_path."/rename_variation_dir/", $file_path."/12345") );
+var_dump( rename($file_path."/rename_variation2_dir/", $file_path."/12345") );
// ensure that rename worked fine
-var_dump( file_exists($file_path."/rename_variation_dir" ) ); // expecting false
+var_dump( file_exists($file_path."/rename_variation2_dir" ) ); // expecting false
var_dump( file_exists($file_path."/12345" ) ); // expecting true
rmdir($file_path."/12345");
@@ -45,9 +45,9 @@ echo "Done\n";
--CLEAN--
<?php
$file_path = dirname(__FILE__);
-unlink($file_path."/rename_variation_link.tmp");
-unlink($file_path."/rename_variation.tmp");
-rmdir($file_path."/rename_variation_dir");
+unlink($file_path."/rename_variation2_link.tmp");
+unlink($file_path."/rename_variation2.tmp");
+rmdir($file_path."/rename_variation2_dir");
?>
--EXPECTF--
*** Testing rename() by renaming a file and directory to numeric name ***
diff --git a/ext/standard/tests/file/rename_variation2.phpt b/ext/standard/tests/file/rename_variation2.phpt
index fa3ee1e017..1e0a5d9edd 100644
--- a/ext/standard/tests/file/rename_variation2.phpt
+++ b/ext/standard/tests/file/rename_variation2.phpt
@@ -11,7 +11,7 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
$file_path = dirname(__FILE__);
-$dest_dir = "$file_path/rename_variation_dir";
+$dest_dir = "$file_path/rename_variation2_dir";
// create the $dest_dir
mkdir($dest_dir);
@@ -23,11 +23,11 @@ $filename = $file_path."/rename_variation2.tmp";
var_dump(touch($filename));
// create the soft links to the file
-$linkname = $file_path."/rename_variation_soft_link1.tmp";
+$linkname = $file_path."/rename_variation2_soft_link1.tmp";
var_dump(symlink($filename, $linkname));
//rename the link to a new name in the same dir
-$dest_linkname = $file_path."/rename_variation_soft_link2.tmp";
+$dest_linkname = $file_path."/rename_variation2_soft_link2.tmp";
var_dump( rename( $linkname, $dest_linkname) );
//ensure that link was renamed
clearstatcache();
@@ -35,14 +35,14 @@ var_dump( file_exists($linkname) ); // expecting false
var_dump( file_exists($dest_linkname) ); // expecting true
// rename a link across dir
-var_dump( rename($dest_linkname, $dest_dir."/rename_variation_soft_link2.tmp"));
+var_dump( rename($dest_linkname, $dest_dir."/rename_variation2_soft_link2.tmp"));
//ensure that link got renamed
clearstatcache();
var_dump( file_exists($dest_linkname) ); // expecting false
-var_dump( file_exists($dest_dir."/rename_variation_soft_link2.tmp") ); // expecting true
+var_dump( file_exists($dest_dir."/rename_variation2_soft_link2.tmp") ); // expecting true
// delete the link file now
-unlink($dest_dir."/rename_variation_soft_link2.tmp");
+unlink($dest_dir."/rename_variation2_soft_link2.tmp");
echo "Done\n";
?>
@@ -50,7 +50,7 @@ echo "Done\n";
<?php
$file_path = dirname(__FILE__);
unlink($file_path."/rename_variation2.tmp");
-rmdir($file_path."/rename_variation_dir");
+rmdir($file_path."/rename_variation2_dir");
?>
--EXPECTF--
*** Testing rename() on soft links ***
diff --git a/ext/standard/tests/file/rename_variation3.phpt b/ext/standard/tests/file/rename_variation3.phpt
index ce8921630b..7c47040729 100644
--- a/ext/standard/tests/file/rename_variation3.phpt
+++ b/ext/standard/tests/file/rename_variation3.phpt
@@ -11,41 +11,41 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
$file_path = dirname(__FILE__);
-$dest_dir = "$file_path/rename_variation_dir";
+$dest_dir = "$file_path/rename_variation3_dir";
// create the $dest_dir
mkdir($dest_dir);
echo "\n*** Testing rename() on hard links ***\n";
-$filename = $file_path."/rename_variation1.tmp";
+$filename = $file_path."/rename_variation31.tmp";
@unlink($filename);
var_dump(touch($filename));
-$linkname = $file_path."/rename_variation_hard_link1.tmp";
+$linkname = $file_path."/rename_variation3_hard_link1.tmp";
var_dump(link($filename, $linkname));
//rename the link to a new name in the same dir
-$dest_linkname = $file_path."/rename_variation_hard_link2.tmp";
+$dest_linkname = $file_path."/rename_variation3_hard_link2.tmp";
var_dump( rename( $filename, $dest_linkname) );
//ensure that link was renamed
var_dump( file_exists($filename) ); // expecting false
var_dump( file_exists($dest_linkname) ); // expecting true
// rename a hard link across dir
-var_dump( rename($dest_linkname, $dest_dir."/rename_variation_hard_link2.tmp") );
+var_dump( rename($dest_linkname, $dest_dir."/rename_variation3_hard_link2.tmp") );
//ensure that link got renamed
var_dump( file_exists($dest_linkname) ); // expecting false
-var_dump( file_exists($dest_dir."/rename_variation_hard_link2.tmp") ); // expecting true
+var_dump( file_exists($dest_dir."/rename_variation3_hard_link2.tmp") ); // expecting true
// delete the link file now
-unlink($dest_dir."/rename_variation_hard_link2.tmp");
+unlink($dest_dir."/rename_variation3_hard_link2.tmp");
echo "Done\n";
?>
--CLEAN--
<?php
$file_path = dirname(__FILE__);
-unlink($file_path."/rename_variation_hard_link1.tmp");
-rmdir($file_path."/rename_variation_dir");
+unlink($file_path."/rename_variation3_hard_link1.tmp");
+rmdir($file_path."/rename_variation3_dir");
?>
--EXPECTF--
*** Testing rename() on hard links ***
diff --git a/ext/standard/tests/file/rename_variation4.phpt b/ext/standard/tests/file/rename_variation4.phpt
index 2965f7534a..69753bc322 100644
--- a/ext/standard/tests/file/rename_variation4.phpt
+++ b/ext/standard/tests/file/rename_variation4.phpt
@@ -15,22 +15,22 @@ require dirname(__FILE__).'/file.inc';
/* Renaming a file, link and directory to numeric name */
echo "\n*** Testing rename() by renaming a file, link and directory to numeric name ***\n";
-$fp = fopen($file_path."/rename_variation.tmp", "w");
+$fp = fopen($file_path."/rename_variation4.tmp", "w");
fclose($fp);
// renaming existing file to numeric name
-var_dump( rename($file_path."/rename_variation.tmp", $file_path."/12345") );
+var_dump( rename($file_path."/rename_variation4.tmp", $file_path."/12345") );
// ensure that rename worked fine
-var_dump( file_exists($file_path."/rename_variation.tmp" ) ); // expecting false
+var_dump( file_exists($file_path."/rename_variation4.tmp" ) ); // expecting false
var_dump( file_exists($file_path."/12345" ) ); // expecting true
// remove the file
unlink($file_path."/12345");
-mkdir($file_path."/rename_variation_dir");
+mkdir($file_path."/rename_variation4_dir");
// renaming a directory to numeric name
-var_dump( rename($file_path."/rename_variation_dir/", $file_path."/12345") );
+var_dump( rename($file_path."/rename_variation4_dir/", $file_path."/12345") );
// ensure that rename worked fine
-var_dump( file_exists($file_path."/rename_variation_dir" ) ); // expecting false
+var_dump( file_exists($file_path."/rename_variation4_dir" ) ); // expecting false
var_dump( file_exists($file_path."/12345" ) ); // expecting true
echo "Done\n";
diff --git a/ext/standard/tests/file/rename_variation5.phpt b/ext/standard/tests/file/rename_variation5.phpt
index bf43e49510..2518cf48ea 100644
--- a/ext/standard/tests/file/rename_variation5.phpt
+++ b/ext/standard/tests/file/rename_variation5.phpt
@@ -13,14 +13,14 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
and one another */
// create a dir
$file_path = dirname(__FILE__);
-$dirname = "$file_path/rename_variation_dir";
+$dirname = "$file_path/rename_variation5_dir";
mkdir($dirname);
//create a file
-$filename = "$file_path/rename_variation.tmp";
+$filename = "$file_path/rename_variation5.tmp";
$fp = fopen($filename, "w");
fclose($fp);
// create a link
-$linkname = "$file_path/rename_variation_link.tmp";
+$linkname = "$file_path/rename_variation5_link.tmp";
symlink($filename, $linkname);
echo "\n-- Renaming link to same link name --\n";
@@ -54,9 +54,9 @@ echo "Done\n";
--CLEAN--
<?php
$file_path = dirname(__FILE__);
-unlink($file_path."/rename_variation_link.tmp");
-unlink($file_path."/rename_variation.tmp");
-rmdir($file_path."/rename_variation_dir");
+unlink($file_path."/rename_variation5_link.tmp");
+unlink($file_path."/rename_variation5.tmp");
+rmdir($file_path."/rename_variation5_dir");
?>
--EXPECTF--
-- Renaming link to same link name --
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt
index 86056114b8..86c9cd77c8 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_basic.phpt
@@ -3,7 +3,7 @@ stream_get_meta_data() on a udp socket
--FILE--
<?php
-$tcp_socket = stream_socket_server('tcp://127.0.0.1:31337');
+$tcp_socket = stream_socket_server('tcp://127.0.0.1:31330');
var_dump(stream_get_meta_data($tcp_socket));
fclose($tcp_socket);
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt
index 16b38d9a1b..88d354b378 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt
@@ -4,10 +4,10 @@ Testing stream_get_meta_data() "unread_bytes" field on a udp socket
<?php
/* Setup socket server */
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+$server = stream_socket_server('tcp://127.0.0.1:31331');
/* Connect to it */
-$client = fsockopen('tcp://127.0.0.1:31337');
+$client = fsockopen('tcp://127.0.0.1:31331');
if (!$client) {
die("Unable to create socket");
}
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt
index d30fec7056..e8e39209c9 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt
@@ -4,10 +4,10 @@ Testing stream_get_meta_data() "timed_out" field on a udp socket
<?php
/* Setup socket server */
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+$server = stream_socket_server('tcp://127.0.0.1:31332');
/* Connect to it */
-$client = fsockopen('tcp://127.0.0.1:31337');
+$client = fsockopen('tcp://127.0.0.1:31332');
if (!$client) {
die("Unable to create socket");
}
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt
index 0b079ccf7c..5b68eba25d 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt
@@ -4,10 +4,10 @@ Testing stream_get_meta_data() "blocked" field on a udp socket
<?php
/* Setup socket server */
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+$server = stream_socket_server('tcp://127.0.0.1:31333');
/* Connect to it */
-$client = fsockopen('tcp://127.0.0.1:31337');
+$client = fsockopen('tcp://127.0.0.1:31333');
if (!$client) {
die("Unable to create socket");
}
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt
index f9ef747987..e3f59d10dc 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt
@@ -4,10 +4,10 @@ Testing stream_get_meta_data() "eof" field on a udp socket
<?php
/* Setup socket server */
-$server = stream_socket_server('tcp://127.0.0.1:31337');
+$server = stream_socket_server('tcp://127.0.0.1:31334');
/* Connect to it */
-$client = fsockopen('tcp://127.0.0.1:31337');
+$client = fsockopen('tcp://127.0.0.1:31334');
if (!$client) {
die("Unable to create socket");
}
diff --git a/main/SAPI.c b/main/SAPI.c
index dcb2da629a..8ee7649648 100644
--- a/main/SAPI.c
+++ b/main/SAPI.c
@@ -180,10 +180,6 @@ SAPI_API void sapi_handle_post(void *arg TSRMLS_DC)
{
if (SG(request_info).post_entry && SG(request_info).content_type_dup) {
SG(request_info).post_entry->post_handler(SG(request_info).content_type_dup, arg TSRMLS_CC);
- if (SG(request_info).post_data) {
- efree(SG(request_info).post_data);
- SG(request_info).post_data = NULL;
- }
efree(SG(request_info).content_type_dup);
SG(request_info).content_type_dup = NULL;
}
@@ -249,39 +245,63 @@ static void sapi_read_post_data(TSRMLS_D)
}
}
-
-SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data)
+SAPI_API int sapi_read_post_block(char *buffer, size_t buflen TSRMLS_DC)
{
int read_bytes;
- int allocated_bytes=SAPI_POST_BLOCK_SIZE+1;
+ if (!sapi_module.read_post) {
+ return -1;
+ }
+
+ read_bytes = sapi_module.read_post(buffer, buflen TSRMLS_CC);
+
+ if (read_bytes > 0) {
+ /* gogo */
+ SG(read_post_bytes) += read_bytes;
+ }
+ if (read_bytes < buflen) {
+ /* done */
+ SG(post_read) = 1;
+ }
+
+ return read_bytes;
+}
+
+SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data)
+{
if ((SG(post_max_size) > 0) && (SG(request_info).content_length > SG(post_max_size))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "POST Content-Length of %ld bytes exceeds the limit of %ld bytes",
SG(request_info).content_length, SG(post_max_size));
return;
}
- SG(request_info).post_data = emalloc(allocated_bytes);
- for (;;) {
- read_bytes = sapi_module.read_post(SG(request_info).post_data+SG(read_post_bytes), SAPI_POST_BLOCK_SIZE TSRMLS_CC);
- if (read_bytes<=0) {
- break;
- }
- SG(read_post_bytes) += read_bytes;
- if ((SG(post_max_size) > 0) && (SG(read_post_bytes) > SG(post_max_size))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Actual POST length does not match Content-Length, and exceeds %ld bytes", SG(post_max_size));
- break;
- }
- if (read_bytes < SAPI_POST_BLOCK_SIZE) {
- break;
- }
- if (SG(read_post_bytes)+SAPI_POST_BLOCK_SIZE >= allocated_bytes) {
- allocated_bytes = SG(read_post_bytes)+SAPI_POST_BLOCK_SIZE+1;
- SG(request_info).post_data = erealloc(SG(request_info).post_data, allocated_bytes);
+
+ SG(request_info).request_body = php_stream_temp_create(TEMP_STREAM_DEFAULT, SAPI_POST_BLOCK_SIZE);
+
+ if (sapi_module.read_post) {
+ int read_bytes;
+
+ for (;;) {
+ char buffer[SAPI_POST_BLOCK_SIZE];
+
+ read_bytes = sapi_read_post_block(buffer, SAPI_POST_BLOCK_SIZE TSRMLS_CC);
+
+ if (read_bytes > 0) {
+ php_stream_write(SG(request_info).request_body, buffer, read_bytes);
+ }
+
+ if ((SG(post_max_size) > 0) && (SG(read_post_bytes) > SG(post_max_size))) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Actual POST length does not match Content-Length, and exceeds %ld bytes", SG(post_max_size));
+ break;
+ }
+
+ if (read_bytes < SAPI_POST_BLOCK_SIZE) {
+ /* done */
+ break;
+ }
}
+ php_stream_rewind(SG(request_info).request_body);
}
- SG(request_info).post_data[SG(read_post_bytes)] = 0; /* terminating NULL */
- SG(request_info).post_data_length = SG(read_post_bytes);
}
@@ -387,8 +407,7 @@ SAPI_API void sapi_activate_headers_only(TSRMLS_D)
SG(sapi_headers).http_status_line = NULL;
SG(sapi_headers).mimetype = NULL;
SG(read_post_bytes) = 0;
- SG(request_info).post_data = NULL;
- SG(request_info).raw_post_data = NULL;
+ SG(request_info).request_body = NULL;
SG(request_info).current_user = NULL;
SG(request_info).current_user_length = 0;
SG(request_info).no_headers = 0;
@@ -433,8 +452,7 @@ SAPI_API void sapi_activate(TSRMLS_D)
SG(callback_run) = 0;
SG(callback_func) = NULL;
SG(read_post_bytes) = 0;
- SG(request_info).post_data = NULL;
- SG(request_info).raw_post_data = NULL;
+ SG(request_info).request_body = NULL;
SG(request_info).current_user = NULL;
SG(request_info).current_user_length = 0;
SG(request_info).no_headers = 0;
@@ -452,20 +470,13 @@ SAPI_API void sapi_activate(TSRMLS_D)
/* Handle request method */
if (SG(server_context)) {
- if (PG(enable_post_data_reading) && SG(request_info).request_method) {
- if (SG(request_info).content_type && !strcmp(SG(request_info).request_method, "POST")) {
- /* HTTP POST may contain form data to be processed into variables
- * depending on given content type */
- sapi_read_post_data(TSRMLS_C);
- } else {
- /* Any other method with content payload will fill $HTTP_RAW_POST_DATA
- * if it is enabled by always_populate_raw_post_data.
- * It's up to the webserver to decide whether to allow a method or not. */
- SG(request_info).content_type_dup = NULL;
- if (sapi_module.default_post_reader) {
- sapi_module.default_post_reader(TSRMLS_C);
- }
- }
+ if (PG(enable_post_data_reading)
+ && SG(request_info).content_type
+ && SG(request_info).request_method
+ && !strcmp(SG(request_info).request_method, "POST")) {
+ /* HTTP POST may contain form data to be processed into variables
+ * depending on given content type */
+ sapi_read_post_data(TSRMLS_C);
} else {
SG(request_info).content_type_dup = NULL;
}
@@ -494,22 +505,19 @@ static void sapi_send_headers_free(TSRMLS_D)
SAPI_API void sapi_deactivate(TSRMLS_D)
{
zend_llist_destroy(&SG(sapi_headers).headers);
- if (SG(request_info).post_data) {
- efree(SG(request_info).post_data);
- } else if (SG(server_context)) {
- if(sapi_module.read_post) {
+ if (SG(request_info).request_body) {
+ SG(request_info).request_body = NULL;
+ } else if (SG(server_context)) {
+ if (!SG(post_read)) {
/* make sure we've consumed all request input data */
char dummy[SAPI_POST_BLOCK_SIZE];
int read_bytes;
- while((read_bytes = sapi_module.read_post(dummy, sizeof(dummy)-1 TSRMLS_CC)) > 0) {
- SG(read_post_bytes) += read_bytes;
- }
+ do {
+ read_bytes = sapi_read_post_block(dummy, SAPI_POST_BLOCK_SIZE TSRMLS_CC);
+ } while (SAPI_POST_BLOCK_SIZE == read_bytes);
}
}
- if (SG(request_info).raw_post_data) {
- efree(SG(request_info).raw_post_data);
- }
if (SG(request_info).auth_user) {
efree(SG(request_info).auth_user);
}
diff --git a/main/SAPI.h b/main/SAPI.h
index 6fc60c8865..5525a2aabd 100644
--- a/main/SAPI.h
+++ b/main/SAPI.h
@@ -32,8 +32,7 @@
#include <sys/stat.h>
#define SAPI_OPTION_NO_CHDIR 1
-
-#define SAPI_POST_BLOCK_SIZE 4000
+#define SAPI_POST_BLOCK_SIZE 0x4000
#ifdef PHP_WIN32
# ifdef SAPI_EXPORTS
@@ -80,14 +79,14 @@ END_EXTERN_C()
typedef struct {
const char *request_method;
char *query_string;
- char *post_data, *raw_post_data;
char *cookie_data;
long content_length;
- int64_t post_data_length, raw_post_data_length;
char *path_translated;
char *request_uri;
+ struct _php_stream *request_body;
+
const char *content_type;
zend_bool headers_only;
@@ -121,6 +120,7 @@ typedef struct _sapi_globals_struct {
sapi_request_info request_info;
sapi_headers_struct sapi_headers;
int64_t read_post_bytes;
+ unsigned char post_read;
unsigned char headers_sent;
struct stat global_stat;
char *default_mimetype;
@@ -189,7 +189,7 @@ SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bo
SAPI_API int sapi_send_headers(TSRMLS_D);
SAPI_API void sapi_free_header(sapi_header_struct *sapi_header);
SAPI_API void sapi_handle_post(void *arg TSRMLS_DC);
-
+SAPI_API int sapi_read_post_block(char *buffer, size_t buflen TSRMLS_DC);
SAPI_API int sapi_register_post_entries(sapi_post_entry *post_entry TSRMLS_DC);
SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry TSRMLS_DC);
SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry TSRMLS_DC);
diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c
index eb33ac7ba1..1d99a4e20e 100644
--- a/main/fopen_wrappers.c
+++ b/main/fopen_wrappers.c
@@ -775,7 +775,12 @@ PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, co
* we cannot cannot getcwd() and the requested,
* relatively referenced file is accessible */
copy_len = strlen(filepath) > MAXPATHLEN - 1 ? MAXPATHLEN - 1 : strlen(filepath);
- real_path = estrndup(filepath, copy_len);
+ if (real_path) {
+ memcpy(real_path, filepath, copy_len);
+ real_path[copy_len] = '\0';
+ } else {
+ real_path = estrndup(filepath, copy_len);
+ }
close(fdtest);
return real_path;
} else {
diff --git a/main/main.c b/main/main.c
index 2f56afa03a..1cc842b212 100644
--- a/main/main.c
+++ b/main/main.c
@@ -562,7 +562,6 @@ PHP_INI_BEGIN()
STD_PHP_INI_BOOLEAN("allow_url_fopen", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_url_fopen, php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("allow_url_include", "0", PHP_INI_SYSTEM, OnUpdateBool, allow_url_include, php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("enable_post_data_reading", "1", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, enable_post_data_reading, php_core_globals, core_globals)
- STD_PHP_INI_BOOLEAN("always_populate_raw_post_data", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, always_populate_raw_post_data, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("realpath_cache_size", "16K", PHP_INI_SYSTEM, OnUpdateLong, realpath_cache_size_limit, virtual_cwd_globals, cwd_globals)
STD_PHP_INI_ENTRY("realpath_cache_ttl", "120", PHP_INI_SYSTEM, OnUpdateLong, realpath_cache_ttl, virtual_cwd_globals, cwd_globals)
diff --git a/main/php_content_types.c b/main/php_content_types.c
index c4433978ed..3346efc50e 100644
--- a/main/php_content_types.c
+++ b/main/php_content_types.c
@@ -37,34 +37,11 @@ static sapi_post_entry php_post_entries[] = {
*/
SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader)
{
- char *data;
- int length;
-
- /* $HTTP_RAW_POST_DATA registration */
if (!strcmp(SG(request_info).request_method, "POST")) {
if (NULL == SG(request_info).post_entry) {
/* no post handler registered, so we just swallow the data */
sapi_read_standard_form_data(TSRMLS_C);
}
-
- /* For unknown content types we create HTTP_RAW_POST_DATA even if always_populate_raw_post_data off,
- * this is in-effecient, but we need to keep doing it for BC reasons (for now) */
- if ((PG(always_populate_raw_post_data) || NULL == SG(request_info).post_entry) && SG(request_info).post_data) {
- length = SG(request_info).post_data_length;
- data = estrndup(SG(request_info).post_data, length);
- SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, length);
- }
- }
-
- /* for php://input stream:
- some post handlers modify the content of request_info.post_data
- so for now we need a copy for the php://input stream
- in the long run post handlers should be changed to not touch
- request_info.post_data for memory preservation reasons
- */
- if (SG(request_info).post_data) {
- SG(request_info).raw_post_data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length);
- SG(request_info).raw_post_data_length = SG(request_info).post_data_length;
}
}
/* }}} */
diff --git a/main/php_globals.h b/main/php_globals.h
index 256765d665..fa2fe3b232 100644
--- a/main/php_globals.h
+++ b/main/php_globals.h
@@ -131,7 +131,6 @@ struct _php_core_globals {
zend_bool during_request_startup;
zend_bool allow_url_fopen;
zend_bool enable_post_data_reading;
- zend_bool always_populate_raw_post_data;
zend_bool report_zend_debug;
int last_error_type;
diff --git a/main/php_streams.h b/main/php_streams.h
index c56014c62e..c9732b4848 100644
--- a/main/php_streams.h
+++ b/main/php_streams.h
@@ -242,7 +242,7 @@ PHPAPI php_stream *_php_stream_alloc(php_stream_ops *ops, void *abstract,
END_EXTERN_C()
#define php_stream_alloc(ops, thisptr, persistent_id, mode) _php_stream_alloc((ops), (thisptr), (persistent_id), (mode) STREAMS_CC TSRMLS_CC)
-#define php_stream_get_resource_id(stream) (stream)->rsrc_id
+#define php_stream_get_resource_id(stream) ((php_stream *)(stream))->rsrc_id
#if ZEND_DEBUG
/* use this to tell the stream that it is OK if we don't explicitly close it */
# define php_stream_auto_cleanup(stream) { (stream)->__exposed++; }
diff --git a/main/php_variables.c b/main/php_variables.c
index 7018eae57b..ab9aee3ae3 100644
--- a/main/php_variables.c
+++ b/main/php_variables.c
@@ -23,11 +23,15 @@
#include "php.h"
#include "ext/standard/php_standard.h"
#include "ext/standard/credits.h"
+#include "ext/standard/php_smart_str.h"
#include "php_variables.h"
#include "php_globals.h"
#include "php_content_types.h"
#include "SAPI.h"
#include "zend_globals.h"
+#ifdef PHP_WIN32
+# include "win32/php_inttypes.h"
+#endif
/* for systems that need to override reading of environment variables */
void _php_import_environment_variables(zval *array_ptr TSRMLS_DC);
@@ -228,44 +232,115 @@ plain_var:
free_alloca(var_orig, use_heap);
}
+typedef struct post_var_data {
+ smart_str str;
+ char *ptr;
+ char *end;
+ uint64_t cnt;
+} post_var_data_t;
+
+static zend_bool add_post_var(zval *arr, post_var_data_t *var, zend_bool eof TSRMLS_DC)
+{
+ char *ksep, *vsep;
+ size_t klen, vlen;
+ /* FIXME: string-size_t */
+ unsigned int new_vlen;
+
+ if (var->ptr >= var->end) {
+ return 0;
+ }
+
+ vsep = memchr(var->ptr, '&', var->end - var->ptr);
+ if (!vsep) {
+ if (!eof) {
+ return 0;
+ } else {
+ vsep = var->end;
+ }
+ }
+
+ ksep = memchr(var->ptr, '=', vsep - var->ptr);
+ if (ksep) {
+ *ksep = '\0';
+ /* "foo=bar&" or "foo=&" */
+ klen = ksep - var->ptr;
+ vlen = vsep - ++ksep;
+ } else {
+ ksep = "";
+ /* "foo&" */
+ klen = vsep - var->ptr;
+ vlen = 0;
+ }
+
+
+ php_url_decode(var->ptr, klen);
+ if (vlen) {
+ vlen = php_url_decode(ksep, vlen);
+ }
+
+ if (sapi_module.input_filter(PARSE_POST, var->ptr, &ksep, vlen, &new_vlen TSRMLS_CC)) {
+ php_register_variable_safe(var->ptr, ksep, new_vlen, arr TSRMLS_CC);
+ }
+
+ var->ptr = vsep + (vsep != var->end);
+ return 1;
+}
+
+static inline int add_post_vars(zval *arr, post_var_data_t *vars, zend_bool eof TSRMLS_DC)
+{
+ uint64_t max_vars = PG(max_input_vars);
+
+ vars->ptr = vars->str.c;
+ vars->end = vars->str.c + vars->str.len;
+ while (add_post_var(arr, vars, eof TSRMLS_CC)) {
+ if (++vars->cnt > max_vars) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
+ "Input variables exceeded %" PRIu64 ". "
+ "To increase the limit change max_input_vars in php.ini.",
+ max_vars);
+ return FAILURE;
+ }
+ }
+
+ if (!eof) {
+ memmove(vars->str.c, vars->ptr, vars->str.len = vars->end - vars->ptr);
+ }
+ return SUCCESS;
+}
+
SAPI_API SAPI_POST_HANDLER_FUNC(php_std_post_handler)
{
- char *var, *val, *e, *s, *p;
- zval *array_ptr = (zval *) arg;
- long count = 0;
+ zval *arr = (zval *) arg;
+ php_stream *s = SG(request_info).request_body;
+ post_var_data_t post_data;
- if (SG(request_info).post_data == NULL) {
- return;
- }
+ if (s && SUCCESS == php_stream_rewind(s)) {
+ memset(&post_data, 0, sizeof(post_data));
- s = SG(request_info).post_data;
- e = s + SG(request_info).post_data_length;
+ while (!php_stream_eof(s)) {
+ char buf[BUFSIZ] = {0};
+ size_t len = php_stream_read(s, buf, BUFSIZ);
- while (s < e && (p = memchr(s, '&', (e - s)))) {
-last_value:
- if ((val = memchr(s, '=', (p - s)))) { /* have a value */
- unsigned int val_len, new_val_len;
+ if (len && len != (size_t) -1) {
+ smart_str_appendl(&post_data.str, buf, len);
- if (++count > PG(max_input_vars)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Input variables exceeded %ld. To increase the limit change max_input_vars in php.ini.", PG(max_input_vars));
- return;
+ if (SUCCESS != add_post_vars(arr, &post_data, 0 TSRMLS_CC)) {
+ if (post_data.str.c) {
+ efree(post_data.str.c);
+ }
+ return;
+ }
}
- var = s;
- php_url_decode(var, (val - s));
- val++;
- val_len = php_url_decode(val, (p - val));
- val = estrndup(val, val_len);
- if (sapi_module.input_filter(PARSE_POST, var, &val, val_len, &new_val_len TSRMLS_CC)) {
- php_register_variable_safe(var, val, new_val_len, array_ptr TSRMLS_CC);
+ if (len != BUFSIZ){
+ break;
}
- efree(val);
}
- s = p + 1;
- }
- if (s < e) {
- p = e;
- goto last_value;
+
+ add_post_vars(arr, &post_data, 1 TSRMLS_CC);
+ if (post_data.str.c) {
+ efree(post_data.str.c);
+ }
}
}
diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c
index d50cc4f8a0..5e0f6e955a 100644
--- a/sapi/cli/php_cli_server.c
+++ b/sapi/cli/php_cli_server.c
@@ -1723,8 +1723,7 @@ static void php_cli_server_client_populate_request_info(const php_cli_server_cli
request_info->request_uri = client->request.request_uri;
request_info->path_translated = client->request.path_translated;
request_info->query_string = client->request.query_string;
- request_info->post_data = client->request.content;
- request_info->content_length = request_info->post_data_length = client->request.content_len;
+ request_info->content_length = client->request.content_len;
request_info->auth_user = request_info->auth_password = request_info->auth_digest = NULL;
if (SUCCESS == zend_hash_find(&client->request.headers, "content-type", sizeof("content-type"), (void**)&val)) {
request_info->content_type = *val;
diff --git a/tests/basic/024.phpt b/tests/basic/024.phpt
deleted file mode 100644
index bf8a206b3a..0000000000
--- a/tests/basic/024.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Test HTTP_RAW_POST_DATA creation
---INI--
-always_populate_raw_post_data=1
-max_input_vars=1000
---POST--
-a=ABC&y=XYZ&c[]=1&c[]=2&c[a]=3
---FILE--
-<?php
-var_dump($_POST, $HTTP_RAW_POST_DATA);
-?>
---EXPECT--
-array(3) {
- ["a"]=>
- string(3) "ABC"
- ["y"]=>
- string(3) "XYZ"
- ["c"]=>
- array(3) {
- [0]=>
- string(1) "1"
- [1]=>
- string(1) "2"
- ["a"]=>
- string(1) "3"
- }
-}
-string(30) "a=ABC&y=XYZ&c[]=1&c[]=2&c[a]=3"
diff --git a/tests/basic/026.phpt b/tests/basic/026.phpt
deleted file mode 100644
index b98a31f430..0000000000
--- a/tests/basic/026.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Registration of HTTP_RAW_POST_DATA due to unknown content-type
---INI--
-always_populate_raw_post_data=0
---POST_RAW--
-Content-Type: unknown/type
-a=1&b=ZYX
---FILE--
-<?php
-var_dump($_POST, $HTTP_RAW_POST_DATA);
-?>
---EXPECT--
-array(0) {
-}
-string(9) "a=1&b=ZYX"
diff --git a/tests/basic/enable_post_data_reading_01.phpt b/tests/basic/enable_post_data_reading_01.phpt
index 1a0e33f617..19ee5d583f 100644
--- a/tests/basic/enable_post_data_reading_01.phpt
+++ b/tests/basic/enable_post_data_reading_01.phpt
@@ -11,6 +11,7 @@ var_dump($_FILES);
var_dump($_POST);
var_dump($HTTP_RAW_POST_DATA);
var_dump(file_get_contents("php://input"));
+var_dump(file_get_contents("php://input"));
--EXPECTF--
array(0) {
}
@@ -20,3 +21,4 @@ array(0) {
Notice: Undefined variable: HTTP_RAW_POST_DATA in %s on line %d
NULL
string(9) "a=1&b=ZYX"
+string(9) "a=1&b=ZYX"
diff --git a/tests/basic/enable_post_data_reading_02.phpt b/tests/basic/enable_post_data_reading_02.phpt
index dc7f6b127a..4e1643ebd0 100644
--- a/tests/basic/enable_post_data_reading_02.phpt
+++ b/tests/basic/enable_post_data_reading_02.phpt
@@ -15,6 +15,7 @@ Content-Type: text/plain-file
var_dump($_FILES);
var_dump($_POST);
var_dump(file_get_contents("php://input"));
+var_dump(file_get_contents("php://input"));
--EXPECTF--
array(0) {
}
@@ -26,3 +27,9 @@ Content-Type: text/plain-file
1
-----------------------------20896060251896012921717172737--"
+string(%d) "-----------------------------20896060251896012921717172737
+Content-Disposition: form-data; name="file1"; filename="file1.txt"
+Content-Type: text/plain-file
+
+1
+-----------------------------20896060251896012921717172737--"
diff --git a/tests/basic/enable_post_data_reading_03.phpt b/tests/basic/enable_post_data_reading_03.phpt
index cdabe910ca..6a62282ea2 100644
--- a/tests/basic/enable_post_data_reading_03.phpt
+++ b/tests/basic/enable_post_data_reading_03.phpt
@@ -12,6 +12,7 @@ var_dump($_FILES);
var_dump($_POST);
var_dump($HTTP_RAW_POST_DATA);
var_dump(file_get_contents("php://input"));
+var_dump(file_get_contents("php://input"));
--EXPECTF--
array(0) {
}
@@ -21,3 +22,4 @@ array(0) {
Notice: Undefined variable: HTTP_RAW_POST_DATA in %s on line %d
NULL
string(9) "a=1&b=ZYX"
+string(9) "a=1&b=ZYX"
diff --git a/tests/basic/enable_post_data_reading_04.phpt b/tests/basic/enable_post_data_reading_04.phpt
index a1685040bb..a7c7e496d8 100644
--- a/tests/basic/enable_post_data_reading_04.phpt
+++ b/tests/basic/enable_post_data_reading_04.phpt
@@ -12,6 +12,7 @@ var_dump($_FILES);
var_dump($_POST);
var_dump($HTTP_RAW_POST_DATA);
var_dump(file_get_contents("php://input"));
+var_dump(file_get_contents("php://input"));
--EXPECTF--
array(0) {
}
@@ -21,3 +22,4 @@ array(0) {
Notice: Undefined variable: HTTP_RAW_POST_DATA in %s on line %d
NULL
string(9) "a=1&b=ZYX"
+string(9) "a=1&b=ZYX"
diff --git a/tests/basic/enable_post_data_reading_05.phpt b/tests/basic/enable_post_data_reading_05.phpt
new file mode 100644
index 0000000000..d8efa0129e
--- /dev/null
+++ b/tests/basic/enable_post_data_reading_05.phpt
@@ -0,0 +1,26 @@
+--TEST--
+enable_post_data_reading: using multiple input streams
+--INI--
+enable_post_data_reading=0
+max_execution_time=2
+--POST_RAW--
+Content-Type: application/unknown
+One line of data
+--FILE--
+<?php
+echo "Test\n";
+
+$f1 = fopen("php://input", "r");
+$f2 = fopen("php://input", "r");
+
+while (!feof($f1) && !feof($f2)) {
+ echo fgetc($f1), fgetc($f2);
+}
+
+?>
+
+Done
+--EXPECT--
+Test
+OOnnee lliinnee ooff ddaattaa
+Done
diff --git a/tests/basic/enable_post_data_reading_06.phpt b/tests/basic/enable_post_data_reading_06.phpt
new file mode 100644
index 0000000000..fbed195c03
--- /dev/null
+++ b/tests/basic/enable_post_data_reading_06.phpt
@@ -0,0 +1,271 @@
+--TEST--
+enable_post_data_reading: using multiple input streams (more than 8k data)
+--INI--
+enable_post_data_reading=0
+--POST_RAW--
+Content-Type: application/unknown
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+.
+--FILE--
+<?php
+echo "Test\n";
+
+$f1 = fopen("php://input", "r");
+$f2 = fopen("php://input", "r");
+
+while (!feof($f1) && !feof($f2)) {
+ echo fgets($f1), fgets($f2);
+}
+
+?>
+
+Done
+--EXPECT--
+Test
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+..
+Done
diff --git a/win32/php_inttypes.h b/win32/php_inttypes.h
new file mode 100644
index 0000000000..25542771f5
--- /dev/null
+++ b/win32/php_inttypes.h
@@ -0,0 +1,305 @@
+// ISO C9x compliant inttypes.h for Microsoft Visual Studio
+// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
+//
+// Copyright (c) 2006 Alexander Chemeris
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// 3. The name of the author may be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _MSC_VER // [
+#error "Use this header only with Microsoft Visual C++ compilers!"
+#endif // _MSC_VER ]
+
+#ifndef _MSC_INTTYPES_H_ // [
+#define _MSC_INTTYPES_H_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif
+
+#include "stdint.h"
+
+// 7.8 Format conversion of integer types
+
+typedef struct {
+ intmax_t quot;
+ intmax_t rem;
+} imaxdiv_t;
+
+// 7.8.1 Macros for format specifiers
+
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198
+
+// The fprintf macros for signed integers are:
+#define PRId8 "d"
+#define PRIi8 "i"
+#define PRIdLEAST8 "d"
+#define PRIiLEAST8 "i"
+#define PRIdFAST8 "d"
+#define PRIiFAST8 "i"
+
+#define PRId16 "hd"
+#define PRIi16 "hi"
+#define PRIdLEAST16 "hd"
+#define PRIiLEAST16 "hi"
+#define PRIdFAST16 "hd"
+#define PRIiFAST16 "hi"
+
+#define PRId32 "I32d"
+#define PRIi32 "I32i"
+#define PRIdLEAST32 "I32d"
+#define PRIiLEAST32 "I32i"
+#define PRIdFAST32 "I32d"
+#define PRIiFAST32 "I32i"
+
+#define PRId64 "I64d"
+#define PRIi64 "I64i"
+#define PRIdLEAST64 "I64d"
+#define PRIiLEAST64 "I64i"
+#define PRIdFAST64 "I64d"
+#define PRIiFAST64 "I64i"
+
+#define PRIdMAX "I64d"
+#define PRIiMAX "I64i"
+
+#define PRIdPTR "Id"
+#define PRIiPTR "Ii"
+
+// The fprintf macros for unsigned integers are:
+#define PRIo8 "o"
+#define PRIu8 "u"
+#define PRIx8 "x"
+#define PRIX8 "X"
+#define PRIoLEAST8 "o"
+#define PRIuLEAST8 "u"
+#define PRIxLEAST8 "x"
+#define PRIXLEAST8 "X"
+#define PRIoFAST8 "o"
+#define PRIuFAST8 "u"
+#define PRIxFAST8 "x"
+#define PRIXFAST8 "X"
+
+#define PRIo16 "ho"
+#define PRIu16 "hu"
+#define PRIx16 "hx"
+#define PRIX16 "hX"
+#define PRIoLEAST16 "ho"
+#define PRIuLEAST16 "hu"
+#define PRIxLEAST16 "hx"
+#define PRIXLEAST16 "hX"
+#define PRIoFAST16 "ho"
+#define PRIuFAST16 "hu"
+#define PRIxFAST16 "hx"
+#define PRIXFAST16 "hX"
+
+#define PRIo32 "I32o"
+#define PRIu32 "I32u"
+#define PRIx32 "I32x"
+#define PRIX32 "I32X"
+#define PRIoLEAST32 "I32o"
+#define PRIuLEAST32 "I32u"
+#define PRIxLEAST32 "I32x"
+#define PRIXLEAST32 "I32X"
+#define PRIoFAST32 "I32o"
+#define PRIuFAST32 "I32u"
+#define PRIxFAST32 "I32x"
+#define PRIXFAST32 "I32X"
+
+#define PRIo64 "I64o"
+#define PRIu64 "I64u"
+#define PRIx64 "I64x"
+#define PRIX64 "I64X"
+#define PRIoLEAST64 "I64o"
+#define PRIuLEAST64 "I64u"
+#define PRIxLEAST64 "I64x"
+#define PRIXLEAST64 "I64X"
+#define PRIoFAST64 "I64o"
+#define PRIuFAST64 "I64u"
+#define PRIxFAST64 "I64x"
+#define PRIXFAST64 "I64X"
+
+#define PRIoMAX "I64o"
+#define PRIuMAX "I64u"
+#define PRIxMAX "I64x"
+#define PRIXMAX "I64X"
+
+#define PRIoPTR "Io"
+#define PRIuPTR "Iu"
+#define PRIxPTR "Ix"
+#define PRIXPTR "IX"
+
+// The fscanf macros for signed integers are:
+#define SCNd8 "d"
+#define SCNi8 "i"
+#define SCNdLEAST8 "d"
+#define SCNiLEAST8 "i"
+#define SCNdFAST8 "d"
+#define SCNiFAST8 "i"
+
+#define SCNd16 "hd"
+#define SCNi16 "hi"
+#define SCNdLEAST16 "hd"
+#define SCNiLEAST16 "hi"
+#define SCNdFAST16 "hd"
+#define SCNiFAST16 "hi"
+
+#define SCNd32 "ld"
+#define SCNi32 "li"
+#define SCNdLEAST32 "ld"
+#define SCNiLEAST32 "li"
+#define SCNdFAST32 "ld"
+#define SCNiFAST32 "li"
+
+#define SCNd64 "I64d"
+#define SCNi64 "I64i"
+#define SCNdLEAST64 "I64d"
+#define SCNiLEAST64 "I64i"
+#define SCNdFAST64 "I64d"
+#define SCNiFAST64 "I64i"
+
+#define SCNdMAX "I64d"
+#define SCNiMAX "I64i"
+
+#ifdef _WIN64 // [
+# define SCNdPTR "I64d"
+# define SCNiPTR "I64i"
+#else // _WIN64 ][
+# define SCNdPTR "ld"
+# define SCNiPTR "li"
+#endif // _WIN64 ]
+
+// The fscanf macros for unsigned integers are:
+#define SCNo8 "o"
+#define SCNu8 "u"
+#define SCNx8 "x"
+#define SCNX8 "X"
+#define SCNoLEAST8 "o"
+#define SCNuLEAST8 "u"
+#define SCNxLEAST8 "x"
+#define SCNXLEAST8 "X"
+#define SCNoFAST8 "o"
+#define SCNuFAST8 "u"
+#define SCNxFAST8 "x"
+#define SCNXFAST8 "X"
+
+#define SCNo16 "ho"
+#define SCNu16 "hu"
+#define SCNx16 "hx"
+#define SCNX16 "hX"
+#define SCNoLEAST16 "ho"
+#define SCNuLEAST16 "hu"
+#define SCNxLEAST16 "hx"
+#define SCNXLEAST16 "hX"
+#define SCNoFAST16 "ho"
+#define SCNuFAST16 "hu"
+#define SCNxFAST16 "hx"
+#define SCNXFAST16 "hX"
+
+#define SCNo32 "lo"
+#define SCNu32 "lu"
+#define SCNx32 "lx"
+#define SCNX32 "lX"
+#define SCNoLEAST32 "lo"
+#define SCNuLEAST32 "lu"
+#define SCNxLEAST32 "lx"
+#define SCNXLEAST32 "lX"
+#define SCNoFAST32 "lo"
+#define SCNuFAST32 "lu"
+#define SCNxFAST32 "lx"
+#define SCNXFAST32 "lX"
+
+#define SCNo64 "I64o"
+#define SCNu64 "I64u"
+#define SCNx64 "I64x"
+#define SCNX64 "I64X"
+#define SCNoLEAST64 "I64o"
+#define SCNuLEAST64 "I64u"
+#define SCNxLEAST64 "I64x"
+#define SCNXLEAST64 "I64X"
+#define SCNoFAST64 "I64o"
+#define SCNuFAST64 "I64u"
+#define SCNxFAST64 "I64x"
+#define SCNXFAST64 "I64X"
+
+#define SCNoMAX "I64o"
+#define SCNuMAX "I64u"
+#define SCNxMAX "I64x"
+#define SCNXMAX "I64X"
+
+#ifdef _WIN64 // [
+# define SCNoPTR "I64o"
+# define SCNuPTR "I64u"
+# define SCNxPTR "I64x"
+# define SCNXPTR "I64X"
+#else // _WIN64 ][
+# define SCNoPTR "lo"
+# define SCNuPTR "lu"
+# define SCNxPTR "lx"
+# define SCNXPTR "lX"
+#endif // _WIN64 ]
+
+#endif // __STDC_FORMAT_MACROS ]
+
+// 7.8.2 Functions for greatest-width integer types
+
+// 7.8.2.1 The imaxabs function
+#define imaxabs _abs64
+
+// 7.8.2.2 The imaxdiv function
+
+// This is modified version of div() function from Microsoft's div.c found
+// in %MSVC.NET%\crt\src\div.c
+#ifdef STATIC_IMAXDIV // [
+static
+#else // STATIC_IMAXDIV ][
+_inline
+#endif // STATIC_IMAXDIV ]
+imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
+{
+ imaxdiv_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ if (numer < 0 && result.rem > 0) {
+ // did division wrong; must fix up
+ ++result.quot;
+ result.rem -= denom;
+ }
+
+ return result;
+}
+
+// 7.8.2.3 The strtoimax and strtoumax functions
+#define strtoimax _strtoi64
+#define strtoumax _strtoui64
+
+// 7.8.2.4 The wcstoimax and wcstoumax functions
+#define wcstoimax _wcstoi64
+#define wcstoumax _wcstoui64
+
+
+#endif // _MSC_INTTYPES_H_ ]