]> granicus.if.org Git - php/commitdiff
add test for bug 27508
authorWez Furlong <wez@php.net>
Wed, 11 May 2005 02:01:44 +0000 (02:01 +0000)
committerWez Furlong <wez@php.net>
Wed, 11 May 2005 02:01:44 +0000 (02:01 +0000)
ext/standard/tests/file/bug27508.phpt [new file with mode: 0644]

diff --git a/ext/standard/tests/file/bug27508.phpt b/ext/standard/tests/file/bug27508.phpt
new file mode 100644 (file)
index 0000000..5374a0d
--- /dev/null
@@ -0,0 +1,69 @@
+--TEST--
+Bug #27508 (userspace wrappers have bogus eof indicator)
+--FILE--
+<?php # vim:ft=php
+class FileStream {
+    public $fp;
+   
+    function stream_open($path, $mode, $options, &$opened_path) 
+    {
+        $url = urldecode(substr($path, 9));
+        $this->fp = fopen($url, $mode);
+
+        return true;
+    }
+
+    function stream_read($count) 
+    {
+        return fread($this->fp, $count);
+    }
+
+    function stream_write($data) 
+    {
+        return fwrite($this->fp, $data);
+    }
+
+    function stream_tell() 
+    {
+        return ftell($this->fp);
+    }
+
+    function stream_eof() 
+    {
+        return feof($this->fp);
+    }
+
+    function stream_seek($offset, $whence) 
+    {
+        return fseek($this->fp, $offset, $whence) == 0 ? true : false;
+    }
+}
+
+stream_wrapper_register("myFile", "FileStream")
+    or die("Failed to register protocol");
+
+$tn = tempnam('/tmp', 'foo');
+
+$fp = fopen("myFile://" . urlencode($tn), "w+");
+
+fwrite($fp, "line1\n");
+fwrite($fp, "line2\n");
+fwrite($fp, "line3\n");
+
+debug_zval_dump(feof($fp));
+rewind($fp);
+echo ftell($fp) . "\n";
+debug_zval_dump(feof($fp));
+while (!feof($fp)) {
+    echo fgets($fp);
+}
+fclose($fp);
+
+unlink($tn);
+--EXPECT--
+bool(false) refcount(1)
+0
+bool(false) refcount(1)
+line1
+line2
+line3