php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #45928 large scripts from stdin are stripped at 16K border
Submitted: 2008-08-26 18:24 UTC Modified: 2008-09-10 10:31 UTC
From: indeyets@php.net Assigned:
Status: Closed Package: CGI/CLI related
PHP Version: 5.3CVS-2008-08-26 (CVS) OS: Mac OS X 10.5
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: indeyets@php.net
New email:
PHP Version: OS:

 

 [2008-08-26 18:24 UTC] indeyets@php.net
Description:
------------
any php-file which is larger that 16Kb will result in parse error on Mac OS X, if run as following:
cat largefile.php|php -l

while the following options will work:
php -l largefile.php
php -l < largefile.php

"-l" flag is optional. it can be reproduced without it too

I discussed this with Rasmus (he was able to reproduce this problem too), and he mentioned, that this bug is most likely re2c-related

Expected result:
----------------
No syntax errors detected in -

Actual result:
--------------
PHP Parse error:  syntax error, unexpected $end in ?

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-09-09 12:00 UTC] cschneid at cschneid dot com
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.

I posted this to internals@php.net but did not get any reply so I'm not sure how to proceed.
 [2008-09-10 10:31 UTC] lbarnaud@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 17:01:58 2024 UTC