summaryrefslogtreecommitdiff
path: root/ext/standard/tests/filters
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-03-14 05:42:27 +0000
committer <>2013-04-03 16:25:08 +0000
commitc4dd7a1a684490673e25aaf4fabec5df138854c4 (patch)
tree4d57c44caae4480efff02b90b9be86f44bf25409 /ext/standard/tests/filters
downloadphp2-master.tar.gz
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/standard/tests/filters')
-rw-r--r--ext/standard/tests/filters/001.phpt31
-rw-r--r--ext/standard/tests/filters/basic.phpt44
-rw-r--r--ext/standard/tests/filters/bug22538.phpt44
-rw-r--r--ext/standard/tests/filters/bug35916.phpt42
-rw-r--r--ext/standard/tests/filters/bug46164-1.phpt22
-rw-r--r--ext/standard/tests/filters/bug46164-2.phpt24
-rw-r--r--ext/standard/tests/filters/bug50363.phpt17
-rw-r--r--ext/standard/tests/filters/chunked_001.phpt35
-rw-r--r--ext/standard/tests/filters/filter_errors.inc37
-rw-r--r--ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt18
-rw-r--r--ext/standard/tests/filters/filter_errors_user.phpt179
-rw-r--r--ext/standard/tests/filters/filter_errors_zlib_inflate.phpt14
-rw-r--r--ext/standard/tests/filters/php_user_filter_01.phpt17
-rw-r--r--ext/standard/tests/filters/php_user_filter_02.phpt12
-rw-r--r--ext/standard/tests/filters/php_user_filter_03.phpt12
-rw-r--r--ext/standard/tests/filters/read.phpt72
-rw-r--r--ext/standard/tests/filters/stream_filter_remove_basic.phpt47
-rw-r--r--ext/standard/tests/filters/stream_filter_remove_error.phpt80
18 files changed, 747 insertions, 0 deletions
diff --git a/ext/standard/tests/filters/001.phpt b/ext/standard/tests/filters/001.phpt
new file mode 100644
index 0000000..afbcdcf
--- /dev/null
+++ b/ext/standard/tests/filters/001.phpt
@@ -0,0 +1,31 @@
+--TEST--
+stream_filter_register() and invalid arguments
+--FILE--
+<?php
+
+var_dump(stream_filter_register("", ""));
+var_dump(stream_filter_register("test", ""));
+var_dump(stream_filter_register("", "test"));
+var_dump(stream_filter_register("------", "nonexistentclass"));
+var_dump(stream_filter_register(array(), "aa"));
+var_dump(stream_filter_register("", array()));
+
+echo "Done\n";
+?>
+--EXPECTF--
+Warning: stream_filter_register(): Filter name cannot be empty in %s on line %d
+bool(false)
+
+Warning: stream_filter_register(): Class name cannot be empty in %s on line %d
+bool(false)
+
+Warning: stream_filter_register(): Filter name cannot be empty in %s on line %d
+bool(false)
+bool(true)
+
+Warning: stream_filter_register() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: stream_filter_register() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+Done
diff --git a/ext/standard/tests/filters/basic.phpt b/ext/standard/tests/filters/basic.phpt
new file mode 100644
index 0000000..13a79e2
--- /dev/null
+++ b/ext/standard/tests/filters/basic.phpt
@@ -0,0 +1,44 @@
+--TEST--
+basic stream filter tests
+--FILE--
+<?php
+# vim600:syn=php:
+
+$text = "Hello There!";
+$filters = array("string.rot13", "string.toupper", "string.tolower");
+
+function filter_test($names)
+{
+ $fp = tmpfile();
+ fwrite($fp, $GLOBALS["text"]);
+ rewind($fp);
+ foreach ($names as $name) {
+ echo "filter: $name\n";
+ var_dump(stream_filter_prepend($fp, $name));
+ }
+ var_dump(fgets($fp));
+ fclose($fp);
+}
+
+foreach ($filters as $filter) {
+ filter_test(array($filter));
+}
+
+filter_test(array($filters[0], $filters[1]));
+
+?>
+--EXPECTF--
+filter: string.rot13
+resource(%d) of type (stream filter)
+string(12) "Uryyb Gurer!"
+filter: string.toupper
+resource(%d) of type (stream filter)
+string(12) "HELLO THERE!"
+filter: string.tolower
+resource(%d) of type (stream filter)
+string(12) "hello there!"
+filter: string.rot13
+resource(%d) of type (stream filter)
+filter: string.toupper
+resource(%d) of type (stream filter)
+string(12) "URYYB GURER!"
diff --git a/ext/standard/tests/filters/bug22538.phpt b/ext/standard/tests/filters/bug22538.phpt
new file mode 100644
index 0000000..438b5be
--- /dev/null
+++ b/ext/standard/tests/filters/bug22538.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Bug #22538 (filtered stream doesn't update file pointer)
+--FILE--
+<?php
+function my_stream_copy_to_stream($fin, $fout) {
+ while (!feof($fin)) {
+ fwrite($fout, fread($fin, 4096));
+ }
+}
+
+$size = 65536;
+
+do {
+ $path1 = sprintf("%s/%s%da", dirname(__FILE__), uniqid(), time());
+ $path2 = sprintf("%s/%s%db", dirname(__FILE__), uniqid(), time());
+} while ($path1 == $path2);
+
+$fp = fopen($path1, "w") or die("Can not open $path1\n");
+$str = "abcdefghijklmnopqrstuvwxyz\n";
+$str_len = strlen($str);
+$cnt = $size;
+while (($cnt -= $str_len) > 0) {
+ fwrite($fp, $str);
+}
+$cnt = $size - ($str_len + $cnt);
+fclose($fp);
+$fin = fopen($path1, "r") or die("Can not open $path1\n");;
+$fout = fopen($path2, "w") or die("Can not open $path2\n");;
+stream_filter_append($fout, "string.rot13");
+my_stream_copy_to_stream($fin, $fout);
+fclose($fout);
+fclose($fin);
+var_dump($cnt);
+var_dump(filesize($path2));
+var_dump(md5_file($path1));
+var_dump(md5_file($path2));
+unlink($path1);
+unlink($path2);
+?>
+--EXPECT--
+int(65529)
+int(65529)
+string(32) "e10e3d1ae81b084b822e8592d019b57a"
+string(32) "931f0fbf8a72312e3bab9965b1d1081c"
diff --git a/ext/standard/tests/filters/bug35916.phpt b/ext/standard/tests/filters/bug35916.phpt
new file mode 100644
index 0000000..4d2027d
--- /dev/null
+++ b/ext/standard/tests/filters/bug35916.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Bug #35916 (Duplicate calls to stream_bucket_append() lead to a crash)
+--FILE--
+<?php
+$file = dirname(__FILE__) . "/bug35916.txt";
+@unlink($file);
+
+class strtoupper_filter extends php_user_filter
+{
+ function filter($in, $out, &$consumed, $closing)
+ {
+ while($bucket=stream_bucket_make_writeable($in)) {
+ $bucket->data = strtoupper($bucket->data);
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_PASS_ON;
+ }
+ function onCreate()
+ {
+ echo "fffffffffff\n";
+ }
+ function onClose()
+ {
+ echo "hello\n";
+ }
+}
+
+stream_filter_register("strtoupper", "strtoupper_filter");
+$fp=fopen($file, "w");
+stream_filter_append($fp, "strtoupper");
+fread($fp, 1024);
+fwrite($fp, "Thank you\n");
+fclose($fp);
+readfile($file);
+unlink($file);
+?>
+--EXPECT--
+fffffffffff
+hello
+THANK YOU
diff --git a/ext/standard/tests/filters/bug46164-1.phpt b/ext/standard/tests/filters/bug46164-1.phpt
new file mode 100644
index 0000000..b2d2d4e
--- /dev/null
+++ b/ext/standard/tests/filters/bug46164-1.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #46164 - 1 (stream_filter_remove() closes the stream)
+--FILE--
+<?php
+class user_filter extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ while($bucket = stream_bucket_make_writeable($in)) {
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_PASS_ON;
+ }
+}
+stream_filter_register('user_filter','user_filter');
+
+$fd = fopen('php://memory','w');
+$filter = stream_filter_append($fd, 'user_filter');
+stream_filter_remove($filter);
+var_dump(fclose($fd));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/filters/bug46164-2.phpt b/ext/standard/tests/filters/bug46164-2.phpt
new file mode 100644
index 0000000..6a1bde5
--- /dev/null
+++ b/ext/standard/tests/filters/bug46164-2.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Bug #46164 - 2 (stream_filter_remove() closes the stream)
+--FILE--
+<?php
+class user_filter extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ while($bucket = stream_bucket_make_writeable($in)) {
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ unset($this->stream);
+ return PSFS_PASS_ON;
+ }
+}
+stream_filter_register('user_filter','user_filter');
+
+$fd = fopen('php://memory','w');
+$filter = stream_filter_append($fd, 'user_filter');
+fwrite($fd, "foo");
+fflush($fd);
+var_dump(fclose($fd));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/filters/bug50363.phpt b/ext/standard/tests/filters/bug50363.phpt
new file mode 100644
index 0000000..3395ede
--- /dev/null
+++ b/ext/standard/tests/filters/bug50363.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #50363 (Invalid parsing in convert.quoted-printable-decode filter)
+--FILE--
+<?php
+
+$foo = "Sauvegarder=C3=A9ussi(e) n=C3=A3o N=C3=83O\n";
+$foo .= "Sauvegarder=c3=a9ussi(e) n=c3=a3o N=c3=83O\n"; // Does not work!
+$b = fopen('php://temp', 'w+');
+stream_filter_append($b, 'convert.quoted-printable-decode', STREAM_FILTER_WRITE);
+fwrite($b, $foo);
+rewind($b);
+fpassthru($b);
+
+?>
+--EXPECTF--
+Sauvegarderéussi(e) não NÃO
+Sauvegarderéussi(e) não NÃO
diff --git a/ext/standard/tests/filters/chunked_001.phpt b/ext/standard/tests/filters/chunked_001.phpt
new file mode 100644
index 0000000..0e0f645
--- /dev/null
+++ b/ext/standard/tests/filters/chunked_001.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Chunked encoding
+--SKIPIF--
+<?php
+$filters = stream_get_filters();
+if(! in_array( "dechunk", $filters )) die( "chunked filter not available." );
+?>
+--INI--
+allow_url_fopen=1
+--FILE--
+<?php
+$streams = array(
+ "data://text/plain,0\r\n",
+ "data://text/plain,2\r\nte\r\n2\r\nst\r\n0\r\n",
+ "data://text/plain,2\nte\n2\nst\n0\n",
+ "data://text/plain,2;a=1\nte\n2;a=2;b=3\r\nst\n0\n",
+ "data://text/plain,2\nte\n2\nst\n0\na=b\r\nc=d\n\r\n",
+ "data://text/plain,1f\n0123456789abcdef0123456789abcde\n1\nf\n0\n",
+ "data://text/plain,1E\n0123456789abcdef0123456789abcd\n2\nef\n0\n",
+);
+foreach ($streams as $name) {
+ $fp = fopen($name, "r");
+ stream_filter_append($fp, "dechunk", STREAM_FILTER_READ);
+ var_dump(stream_get_contents($fp));
+ fclose($fp);
+}
+?>
+--EXPECT--
+string(0) ""
+string(4) "test"
+string(4) "test"
+string(4) "test"
+string(4) "test"
+string(32) "0123456789abcdef0123456789abcdef"
+string(32) "0123456789abcdef0123456789abcdef"
diff --git a/ext/standard/tests/filters/filter_errors.inc b/ext/standard/tests/filters/filter_errors.inc
new file mode 100644
index 0000000..7345df3
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors.inc
@@ -0,0 +1,37 @@
+<?php
+
+function filter_errors_skipif($needle) {
+ if (!function_exists('fnmatch')) {
+ die('skip fnmatch() not available');
+ }
+ $filters = stream_get_filters();
+ foreach($filters as $filter) {
+ if (fnmatch($filter, $needle)) return;
+ }
+ die("skip $needle not available");
+}
+
+function filter_errors_test($filter, $data) {
+
+ echo "test filtering of buffered data\n";
+
+ $stream = fopen('php://memory', 'wb+');
+
+ fwrite($stream, b".\r\n$data");
+ fseek($stream, 0, SEEK_SET);
+ stream_get_line($stream, 8192, "\r\n");
+
+ $f = stream_filter_append($stream, $filter);
+
+ echo "test filtering of non buffered data\n";
+
+ $stream = fopen('php://memory', 'wb+');
+
+ fwrite($stream, b"$data");
+ fseek($stream, 0, SEEK_SET);
+
+ stream_filter_append($stream, $filter);
+ stream_get_contents($stream);
+
+}
+
diff --git a/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt b/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt
new file mode 100644
index 0000000..4c043be
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Filter errors: convert.base64-decode
+--SKIPIF--
+<?php require 'filter_errors.inc'; filter_errors_skipif('convert.base64-decode'); ?>
+--FILE--
+<?php
+require 'filter_errors.inc';
+filter_errors_test('convert.base64-decode', '===');
+?>
+--EXPECTF--
+test filtering of buffered data
+
+Warning: stream_filter_append(): stream filter (convert.base64-decode): invalid byte sequence in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in %s
diff --git a/ext/standard/tests/filters/filter_errors_user.phpt b/ext/standard/tests/filters/filter_errors_user.phpt
new file mode 100644
index 0000000..7bdf8de
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors_user.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Filter errors: user filter
+--FILE--
+<?php
+require 'filter_errors.inc';
+
+class test_filter0 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter1 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ $bucket = stream_bucket_make_writeable($in);
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter2 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ while ($bucket = stream_bucket_make_writeable($in)) {
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter3 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ if (!$closing) {
+ $bucket = stream_bucket_new($this->stream, "42");
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter4 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ if (!$closing) {
+ $bucket = stream_bucket_new($this->stream, "42");
+ }
+ return PSFS_ERR_FATAL;
+ }
+}
+
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ var_dump(stream_filter_register("test_filter$i", "test_filter$i"));
+ filter_errors_test("test_filter$i", "42");
+}
+
+echo "test append / read / remove\n";
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $stream = fopen('php://memory', 'wb+');
+ fwrite($stream, b"42");
+ fseek($stream, 0, SEEK_SET);
+ $f = stream_filter_append($stream, "test_filter$i");
+ stream_get_contents($stream);
+ stream_filter_remove($f);
+}
+
+echo "test append all / read / remove all\n";
+$stream = fopen('php://memory', 'wb+');
+fwrite($stream, b"42");
+fseek($stream, 0, SEEK_SET);
+$filters = array();
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $filters[] = stream_filter_append($stream, "test_filter$i");
+}
+stream_get_contents($stream);
+foreach($filters as $filter) {
+ stream_filter_remove($filter);
+}
+
+echo "test append all / read / close\n";
+$stream = fopen('php://memory', 'wb+');
+fwrite($stream, b"42");
+fseek($stream, 0, SEEK_SET);
+$filters = array();
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $filters[] = stream_filter_append($stream, "test_filter$i");
+}
+stream_get_contents($stream);
+fclose($stream);
+
+?>
+--EXPECTF--
+test_filter0
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+test_filter1
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+test_filter2
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+test_filter3
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+test_filter4
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+test append / read / remove
+test_filter0
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter1
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter2
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter3
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test append all / read / remove all
+test_filter0
+test_filter1
+test_filter2
+test_filter3
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test append all / read / close
+test_filter0
+test_filter1
+test_filter2
+test_filter3
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
diff --git a/ext/standard/tests/filters/filter_errors_zlib_inflate.phpt b/ext/standard/tests/filters/filter_errors_zlib_inflate.phpt
new file mode 100644
index 0000000..ebb3b21
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors_zlib_inflate.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Filter errors: zlib.inflate
+--SKIPIF--
+<?php require 'filter_errors.inc'; filter_errors_skipif('zlib.inflate'); ?>
+--FILE--
+<?php
+require 'filter_errors.inc';
+filter_errors_test('zlib.inflate', gzencode(b'42'));
+?>
+--EXPECTF--
+test filtering of buffered data
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
diff --git a/ext/standard/tests/filters/php_user_filter_01.phpt b/ext/standard/tests/filters/php_user_filter_01.phpt
new file mode 100644
index 0000000..e4a9c68
--- /dev/null
+++ b/ext/standard/tests/filters/php_user_filter_01.phpt
@@ -0,0 +1,17 @@
+--TEST--
+class php_user_filter#1
+--FILE--
+<?php
+class foo extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {}
+ function onCreate() {}
+ function onClose() {}
+}
+class bar extends php_user_filter {
+ function filter($in, $out, &$consumed) {}
+ function onCreate() {}
+ function onClose() {}
+}
+?>
+--EXPECTF--
+Strict Standards: Declaration of bar::filter() should be compatible with php_user_filter::filter($in, $out, &$consumed, $closing) in %s on line %d
diff --git a/ext/standard/tests/filters/php_user_filter_02.phpt b/ext/standard/tests/filters/php_user_filter_02.phpt
new file mode 100644
index 0000000..2a1dbfd
--- /dev/null
+++ b/ext/standard/tests/filters/php_user_filter_02.phpt
@@ -0,0 +1,12 @@
+--TEST--
+class php_user_filter#2
+--FILE--
+<?php
+class foo extends php_user_filter {
+ function filter($in, $out, $consumed, $closing) {}
+ function onCreate() {}
+ function onClose() {}
+}
+?>
+--EXPECTF--
+Strict Standards: Declaration of foo::filter() should be compatible with php_user_filter::filter($in, $out, &$consumed, $closing) in %s on line %d
diff --git a/ext/standard/tests/filters/php_user_filter_03.phpt b/ext/standard/tests/filters/php_user_filter_03.phpt
new file mode 100644
index 0000000..e9e0266
--- /dev/null
+++ b/ext/standard/tests/filters/php_user_filter_03.phpt
@@ -0,0 +1,12 @@
+--TEST--
+class php_user_filter#3
+--FILE--
+<?php
+class foo extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {}
+ function onCreate($var) {}
+ function onClose() {}
+}
+?>
+--EXPECTF--
+Strict Standards: Declaration of foo::onCreate() should be compatible with php_user_filter::onCreate() in %s on line %d
diff --git a/ext/standard/tests/filters/read.phpt b/ext/standard/tests/filters/read.phpt
new file mode 100644
index 0000000..a2372cf
--- /dev/null
+++ b/ext/standard/tests/filters/read.phpt
@@ -0,0 +1,72 @@
+--TEST--
+stream filter - reading
+--FILE--
+<?php
+echo "-TEST\n";
+class filter extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing)
+ {
+ $output = 0;
+ while ($bucket = stream_bucket_make_writeable($in)) {
+ $bucket->data = strtoupper($bucket->data);
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ $output = 1;
+ }
+ if ($closing) {
+ $bucket = stream_bucket_new($this->stream, "\n===close===\n");
+ stream_bucket_append($out, $bucket);
+ $output = 1;
+ }
+ return $output ? PSFS_PASS_ON : PSFS_FEED_ME;
+ }
+}
+stream_filter_register("strtoupper", "filter")
+ or die("Failed to register filter");
+
+if ($f = fopen(__FILE__, "rb")) {
+ stream_filter_append($f, "strtoupper");
+ while (!feof($f)) {
+ echo fread($f, 8192);
+ }
+ fclose($f);
+}
+echo "Done\n";
+?>
+--EXPECTF--
+%sTEST
+<?PHP
+ECHO "-TEST\N";
+CLASS FILTER EXTENDS PHP_USER_FILTER {
+ FUNCTION FILTER($IN, $OUT, &$CONSUMED, $CLOSING)
+ {
+ $OUTPUT = 0;
+ WHILE ($BUCKET = STREAM_BUCKET_MAKE_WRITEABLE($IN)) {
+ $BUCKET->DATA = STRTOUPPER($BUCKET->DATA);
+ $CONSUMED += $BUCKET->DATALEN;
+ STREAM_BUCKET_APPEND($OUT, $BUCKET);
+ $OUTPUT = 1;
+ }
+ IF ($CLOSING) {
+ $BUCKET = STREAM_BUCKET_NEW($THIS->STREAM, "\N===CLOSE===\N");
+ STREAM_BUCKET_APPEND($OUT, $BUCKET);
+ $OUTPUT = 1;
+ }
+ RETURN $OUTPUT ? PSFS_PASS_ON : PSFS_FEED_ME;
+ }
+}
+STREAM_FILTER_REGISTER("STRTOUPPER", "FILTER")
+ OR DIE("FAILED TO REGISTER FILTER");
+
+IF ($F = FOPEN(__FILE__, "RB")) {
+ STREAM_FILTER_APPEND($F, "STRTOUPPER");
+ WHILE (!FEOF($F)) {
+ ECHO FREAD($F, 8192);
+ }
+ FCLOSE($F);
+}
+ECHO "DONE\N";
+?>
+
+===close===
+Done
diff --git a/ext/standard/tests/filters/stream_filter_remove_basic.phpt b/ext/standard/tests/filters/stream_filter_remove_basic.phpt
new file mode 100644
index 0000000..6ca84fe
--- /dev/null
+++ b/ext/standard/tests/filters/stream_filter_remove_basic.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test stream_filter_remove() function : basic functionality
+--SKIPIF--
+<?php
+$filters = stream_get_filters();
+if(! in_array( "string.rot13", $filters )) die( "skip rot13 filter not available." );
+?>
+--FILE--
+<?php
+/* Prototype : bool stream_filter_remove(resource stream_filter)
+ * Description: Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource
+ * Source code: ext/standard/streamsfuncs.c
+ * Alias to functions:
+ */
+
+echo "*** Testing stream_filter_remove() : basic functionality ***\n";
+
+$file = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'streamfilterTest.txt';
+touch( $file );
+
+$fp = fopen( $file, 'w+' );
+
+$filter = stream_filter_append( $fp, "string.rot13", STREAM_FILTER_WRITE );
+fwrite( $fp, "Testing the rot13 filter which shifts some things around." );
+
+var_dump( stream_filter_remove( $filter ) );
+fwrite( $fp, "\nadd some more un-filtered foobar\n" );
+
+rewind( $fp );
+fpassthru( $fp );
+fclose( $fp );
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'streamfilterTest.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+*** Testing stream_filter_remove() : basic functionality ***
+bool(true)
+Grfgvat gur ebg13 svygre juvpu fuvsgf fbzr guvatf nebhaq.
+add some more un-filtered foobar
+===DONE===
diff --git a/ext/standard/tests/filters/stream_filter_remove_error.phpt b/ext/standard/tests/filters/stream_filter_remove_error.phpt
new file mode 100644
index 0000000..9cbb925
--- /dev/null
+++ b/ext/standard/tests/filters/stream_filter_remove_error.phpt
@@ -0,0 +1,80 @@
+--TEST--
+Test stream_filter_remove() function : error conditions
+--SKIPIF--
+<?php
+$filters = stream_get_filters();
+if(! in_array( "string.rot13", $filters )) die( "skip rot13 filter not available." );
+?>
+--FILE--
+<?php
+/* Prototype : bool stream_filter_remove(resource stream_filter)
+ * Description: Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource
+ * Source code: ext/standard/streamsfuncs.c
+ * Alias to functions:
+ */
+
+$file = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'streamfilterTest.txt';
+touch( $file );
+$fp = fopen( $file, 'w+' );
+$filter = stream_filter_append( $fp, "string.rot13", STREAM_FILTER_WRITE );
+
+echo "*** Testing stream_filter_remove() : error conditions ***\n";
+
+echo "\n-- Testing stream_filter_remove() function with Zero arguments --\n";
+var_dump( stream_filter_remove() );
+
+echo "\n-- Testing stream_filter_remove() function with more than expected no. of arguments --\n";
+$arg = 'bogus arg';
+var_dump( stream_filter_remove( $filter, $arg ) );
+
+echo "\n-- Testing stream_filter_remove() function with unexisting stream filter --\n";
+var_dump( stream_filter_remove( "fakefilter" ) );
+
+echo "\n-- Testing stream_filter_remove() function with bad resource --\n";
+var_dump( stream_filter_remove( $fp ) );
+
+echo "\n-- Testing stream_filter_remove() function with an already removed filter --\n";
+// Double remove it
+var_dump( stream_filter_remove( $filter ) );
+var_dump( stream_filter_remove( $filter ) );
+
+fclose( $fp );
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'streamfilterTest.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+*** Testing stream_filter_remove() : error conditions ***
+
+-- Testing stream_filter_remove() function with Zero arguments --
+
+Warning: stream_filter_remove() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing stream_filter_remove() function with more than expected no. of arguments --
+
+Warning: stream_filter_remove() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+-- Testing stream_filter_remove() function with unexisting stream filter --
+
+Warning: stream_filter_remove() expects parameter 1 to be resource, string given in %s on line %d
+bool(false)
+
+-- Testing stream_filter_remove() function with bad resource --
+
+Warning: stream_filter_remove(): Invalid resource given, not a stream filter in %s on line %d
+bool(false)
+
+-- Testing stream_filter_remove() function with an already removed filter --
+bool(true)
+
+Warning: stream_filter_remove(): Invalid resource given, not a stream filter in %s on line %d
+bool(false)
+===DONE===