ID: 17547
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Analyzed
Bug Type: Filesystem function related
Operating System: Linux (maybe Windows too)
PHP Version: 4.0CVS-2002-05-31
New Comment:
Wez is on vacation, just commit it. :)
Previous Comments:
------------------------------------------------------------------------
[2002-05-31 20:50:36] [EMAIL PROTECTED]
Actually it turned out to be a problem in main/streams.c . The fgets
emulation code isn't right. I basicall ripped the one from gzgets()
from zlib and it works:
Index: streams.c
===================================================================
RCS file: /repository/php4/main/streams.c,v
retrieving revision 1.52
diff -u -r1.52 streams.c
--- streams.c 30 Apr 2002 00:22:44 -0000 1.52
+++ streams.c 1 Jun 2002 00:46:43 -0000
@@ -248,21 +248,13 @@
return NULL;
} else {
/* unbuffered fgets - poor performance ! */
- size_t n = 1;
char *c = buf;
/* TODO: look at error returns? */
- while(n < maxlen && stream->ops->read(stream, c, 1
TSRMLS_CC) > 0) {
- n++;
- if (*c == '\n') {
- c++;
- break;
- }
- c++;
- }
- *c = 0;
- return buf;
+ while (--maxlen > 0 && stream->ops->read(stream, buf, 1
TSRMLS_CC) == 1 && *buf++ != '\n');
+ *buf = '\0';
+ return c == buf && maxlen > 0 ? NULL : c;
}
}
Does this sound reasonable, Wez?
------------------------------------------------------------------------
[2002-05-31 17:36:59] [EMAIL PROTECTED]
Using a simple bzip2 compressed input file like
$ cat test.txt
1 ene
2 mene
3 muh
4 foo
and compressing it with bzip2
$ bzip2 -c test.txt >test.bz2
and then trying to use file() with compress.bzip2 wrapper results in an
infinite loop, i.e. never returned out of file():
$ cat test.php
<?
print_r(file('compress.bzip2://test.bz2'));
?>
Looking at the code in file() using whil(1) { ... } seems dangerous for
race conditions. But it actually works with e.g. compress.zlib wrapper
and with normal files so I suspect this being a bug in the bz2 wrapper.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17547&edit=1