#32858 [Opn->Fbk]: Bug #25649 has crept back into PHP - Improper feof() handling under FreeBSD
| From: | sniper@php.net | Date: | Thu, 28 Jul 2005 23:57:30 +0000 |
| Subject: | #32858 [Opn->Fbk]: Bug #25649 has crept back into PHP - Improper feof() handling under FreeBSD | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-82634@lists.php.net to get a copy of this message | ||
ID: 32858
Updated by: sniper@php.net
Reported By: lew at mailduct dot com
-Status: Open
+Status: Feedback
Bug Type: Filesystem function related
Operating System: FreeBSD 4.11-REL
PHP Version: 5.0.4, 4.3.10
Assigned To: wez
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php5-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5-win32-latest.zip
Previous Comments:
------------------------------------------------------------------------
[2005-07-28 01:46:34] lew at mailduct dot com
Bug is still present in latest snapshot of PHP.
Also... there seems to be at least one other bug report that is related
to this problem. See bug #32979. The problem is
directly related (and caused) by faulty stream_select and
stream_get_meta_data behaviour.
In summary:
1) stream_select does not properly detect the presence of additional
input data after it hits an EOF. Neither does stream_get_meta_data.
They both continue to return EOF even for a stream that has new data
(filestream, in my example).
2) stream_select does not properly honor its timeout parameter. If no
data is available, the call should WAIT for the timeout period to expire
before returning due to an EOF condition. Instead, it always returns
immediately with an EOF, making the timeout parameter pointless.
3) stream_select does not properly emulate the select() system call,
which would wait for a timeout if no more data were available (EOF)...
in case more data did become available.
Please let me know how else I can help. I'd like to get this recurring
problem resolved once and for all.
------------------------------------------------------------------------
[2005-07-05 01:00:05] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
------------------------------------------------------------------------
[2005-06-27 20:52:22] tony2001@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php5-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5-win32-latest.zip
------------------------------------------------------------------------
[2005-05-27 08:40:27] sniper@php.net
Assigning to Wez since he fixed it last time..
------------------------------------------------------------------------
[2005-05-27 00:02:11] lew at mailduct dot com
I have now tested this using PHP 5.0.4 (cli), and the bug remains.
This bug was fixed by wez@php.net on Sep 2003, but has now crept back
in to both versions 4 and 5 of PHP.
PHP is failing to clear the EOF indicator when reading a stream that
would otherwise BLOCK if read.
--- quote (wez@php.net):
The PHP streams implementation uses the following logic
for determining the EOF status:
- after a read attempt, if no bytes were read OR
(a read error occurred and the error != EWOULDBLOCK)
--> set the EOF indicator
otherwise, clear the EOF indicator [1]
- after a successful fseek(), clear the EOF indicator.
[1] - this step was missing and has just been comitted to
the CVS.
The feof() function call works like this:
- if stream buffer has data, return false
- otherwise, return the EOF indicator flag.
---endquote
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/32858
--
Edit this bug report at http://bugs.php.net/?id=32858&edit=1