summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGustavo André dos Santos Lopes <cataphract@php.net>2010-12-11 02:08:02 +0000
committerGustavo André dos Santos Lopes <cataphract@php.net>2010-12-11 02:08:02 +0000
commit4fe751e8e4bf019d246cddc21a681ea4ba7d1590 (patch)
treed5d89c61f4defd2de02b5eb3b0f713762c0062ff
parentf73258223dacea27a9a5e477e52994ab4fcca145 (diff)
downloadphp-git-4fe751e8e4bf019d246cddc21a681ea4ba7d1590.tar.gz
- Tests and small parsing correction for php://fd wrapper
-rw-r--r--ext/standard/php_fopen_wrapper.c2
-rw-r--r--ext/standard/tests/file/php_fd_wrapper_01.phpt11
-rw-r--r--ext/standard/tests/file/php_fd_wrapper_02.phpt11
-rw-r--r--ext/standard/tests/file/php_fd_wrapper_03.phpt22
-rw-r--r--ext/standard/tests/file/php_fd_wrapper_04.phpt20
5 files changed, 65 insertions, 1 deletions
diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c
index 2a7a2793c7..790c06277e 100644
--- a/ext/standard/php_fopen_wrapper.c
+++ b/ext/standard/php_fopen_wrapper.c
@@ -265,7 +265,7 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch
start = &path[3];
fildes_ori = strtol(start, &end, 10);
- if (end == start || (*end != '\0' && *end != '/')) {
+ if (end == start || *end != '\0') {
php_stream_wrapper_log_error(wrapper, options TSRMLS_CC,
"php://fd/ stream must be specified in the form php://fd/<orig fd>");
return NULL;
diff --git a/ext/standard/tests/file/php_fd_wrapper_01.phpt b/ext/standard/tests/file/php_fd_wrapper_01.phpt
new file mode 100644
index 0000000000..037edd7f6b
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_01.phpt
@@ -0,0 +1,11 @@
+--TEST--
+php://fd wrapper: basic test
+--FILE--
+<?php
+$f = fopen("php://fd/1", "wb");
+fwrite($f, "hi!");
+
+echo "\nDone.\n";
+--EXPECT--
+hi!
+Done.
diff --git a/ext/standard/tests/file/php_fd_wrapper_02.phpt b/ext/standard/tests/file/php_fd_wrapper_02.phpt
new file mode 100644
index 0000000000..6d40dc9ad4
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_02.phpt
@@ -0,0 +1,11 @@
+--TEST--
+php://fd wrapper: mode is ignored
+--FILE--
+<?php
+$f = fopen("php://fd/1", "rkkk");
+fwrite($f, "hi!");
+
+echo "\nDone.\n";
+--EXPECT--
+hi!
+Done.
diff --git a/ext/standard/tests/file/php_fd_wrapper_03.phpt b/ext/standard/tests/file/php_fd_wrapper_03.phpt
new file mode 100644
index 0000000000..c004a4319f
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_03.phpt
@@ -0,0 +1,22 @@
+--TEST--
+php://fd wrapper: bad syntax
+--FILE--
+<?php
+fopen("php://fd", "w");
+fopen("php://fd/", "w");
+fopen("php://fd/-2", "w");
+fopen("php://fd/1/", "w");
+
+echo "\nDone.\n";
+--EXPECTF--
+Warning: fopen(): Invalid php:// URL specified in %s on line %d
+
+Warning: fopen(php://fd): failed to open stream: operation failed in %s on line 2
+
+Warning: fopen(php://fd/): failed to open stream: php://fd/ stream must be specified in the form php://fd/<orig fd> in %s on line %d
+
+Warning: fopen(php://fd/-2): failed to open stream: The file descriptors must be non-negative numbers smaller than %d in %s on line %d
+
+Warning: fopen(php://fd/1/): failed to open stream: php://fd/ stream must be specified in the form php://fd/<orig fd> in %s on line %d
+
+Done.
diff --git a/ext/standard/tests/file/php_fd_wrapper_04.phpt b/ext/standard/tests/file/php_fd_wrapper_04.phpt
new file mode 100644
index 0000000000..51f4d9f171
--- /dev/null
+++ b/ext/standard/tests/file/php_fd_wrapper_04.phpt
@@ -0,0 +1,20 @@
+--TEST--
+php://fd wrapper: invalid file descriptor
+--SKIPIF--
+<?php include('skipif.inc');
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not for Windows");
+
+//we'd need a release and a test variation for windows, because in debug builds we get this message:
+//Warning: Invalid parameter detected in CRT function '_dup' (f:\dd\vctools\crt_bld\self_x86\crt\src\dup.c:52)
+//I greped the CRT sources and found no function capable of validating a file descriptor
+
+--FILE--
+<?php
+fopen("php://fd/12", "w");
+
+echo "\nDone.\n";
+--EXPECTF--
+Warning: fopen(php://fd/12): failed to open stream: Error duping file descriptor 12; possibly it doesn't exist: [9]: %s in %s on line %d
+
+Done.