Hi,

On Tuesday 09 September 2008 14:39:05 Alexey Zakhlestin wrote:
> http://bugs.php.net/bug.php?id=45928
> 
> Christian Schneider wrote:
> 
> > I had a quick look at this bug and found the problem to be in
> > Zend/zend_stream.c function zend_stream_fsize(): It uses fstat() to
> > determine the filesize which on MacOS X for pipes returns either 0 (my
> > interpretation: no data from the pipe ready yet) or a number up to 16384
> > (my interpretation: data from the pipe ready but the maximum buffer size
> > is 16k).
> >
> > I see several solutions but I'm not sure which is the desired one:
> > - return 0 (size unknown) if the file is a pipe (or socket, ...)
> > - return 0 if the file is not a regular file (or symlink, dir?)
> > - look into a way of determining EOF reached
> >
> > As a quick test I changed
> >     return buf.st_size;
> > in function zend_stream_fsize() to
> >     return 0;
> > and cat 30k.php | php worked after that.
> >

It seems to be a good solution. zend_stream seems to already rely on size == 0 
for non-regular files and falls back to something like "while (!feof){ read }" 
in that case.

The following may (no MacOS X to test) fix the problem by returning 0 from 
zend_stream_fsize() when the file descriptor is not a regular file:
http://arnaud.lb.s3.amazonaws.com/45928.patch

Regards,

Arnaud


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to