ID: 17547 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Critical +Status: Analyzed -Bug Type: Bzip2 Related +Bug Type: Filesystem function related Operating System: Linux (maybe Windows too) PHP Version: 4.0CVS-2002-05-31 New Comment:
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? Previous Comments: ------------------------------------------------------------------------ [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