Bug #68948 [Com]: feof() on temporary streams broken
| From: | sjaillet at gmail dot com | Date: | Sat, 07 Feb 2015 13:08:53 +0000 |
| Subject: | Bug #68948 [Com]: feof() on temporary streams broken | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-190506@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=68948&edit=1
ID: 68948
Comment by: sjaillet at gmail dot com
Reported by: yunosh@php.net
Summary: feof() on temporary streams broken
Status: Open
Type: Bug
Package: Streams related
Operating System: Linux
PHP Version: master-Git-2015-01-29 (Git)
Block user comment: N
Private report: N
New Comment:
It's definitely a bug introduced recently.
Indeed with:
$stream = fopen("php://temp", "r+");
fwrite($stream, "0123456789");
rewind($stream);
var_dump(fread($stream, 1024), ftell($stream), feof($stream));
The output for 5.5.20, 5.6.4, php7@20141201, HHVM 3.5.0 is:
string(10) "0123456789"
int(10)
bool(true)
And now with 5.5.21, 5.6.5, php7@20150101 the output was:
string(10) "0123456789"
int(10)
bool(false)
Previous Comments:
------------------------------------------------------------------------
[2015-01-29 20:02:47] yunosh@php.net
It still happens if reading 11 bytes. And even with 10 bytes, this would be BC break against PHP 5.
------------------------------------------------------------------------
[2015-01-29 19:15:29] php at mcq8 dot be
This is due to https://github.com/php/php-src/pull/936
You only get an EOF when you tried to read more than there is data.
This is the same behaviour as reading from a file.
------------------------------------------------------------------------
[2015-01-29 17:42:00] yunosh@php.net
Description:
------------
feof() doesn't work properly on temporary streams.
Test script:
---------------
$stream = fopen("php://temp", "r+");
fwrite($stream, "0123456789");
rewind($stream);
var_dump(fread($stream, 10), ftell($stream), feof($stream));
Expected result:
----------------
string(10) "0123456789"
int(10)
bool(true)
Actual result:
--------------
string(10) "0123456789"
int(10)
bool(false)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=68948&edit=1