Edit report at http://bugs.php.net/bug.php?id=49072&edit=1
ID: 49072
Updated by: rquadling@php.net
Reported by: TorokAlpar at Gmail dot com
Summary: feof never returns true for damaged file in zip
Status: Closed
Type: Bug
Package: Zip Related
Operating System: Windows Xp, Linux
PHP Version: 5.3.0
-Assigned To:
+Assigned To: rquadling
Block user comment: N
Private report: N
New Comment:
The test
http://svn.php.net/viewvc/php/php-src/trunk/ext/zip/tests/bug49072.phpt
is currently failing.
From what I can tell, the reason for the failure is that the when
processing
(http://svn.php.net/viewvc/php/php-src/trunk/ext/zip/zip_stream.c?view=annotate#l31),
the return type from zip_fread (line 37) is cast to size_t.
This is, at the most basic, an unsigned type. So, when comparing (n <
0), this will always be false.
And so any errors recording during the zip_fread() call will fail to be
passed on.
Removing the casting and having n as type int, allows the test to pass
and the appropriate error is generated.
Patch attached.
Previous Comments:
------------------------------------------------------------------------
[2009-08-12 08:36:40] pajoye@php.net
Fixed in the pecl release 1.10.2 and patch applied to all branches (will
be in php 5.2.11 and 5.3.1).
------------------------------------------------------------------------
[2009-08-11 17:11:02] svn@php.net
Automatic comment from SVN on behalf of pajoye
Revision: http://svn.php.net/viewvc/?view=revision&revision=287102
Log: - merge fix for php bug #49072
------------------------------------------------------------------------
[2009-08-11 15:12:00] svn@php.net
Automatic comment from SVN on behalf of pajoye
Revision: http://svn.php.net/viewvc/?view=revision&revision=287095
Log: - fixed bug #49072, feof never returns true for damaged file in zip
------------------------------------------------------------------------
[2009-07-27 12:39:19] pajoye@php.net
Please send me the archive you used to reproduce this problem.
------------------------------------------------------------------------
[2009-07-27 11:47:13] TorokAlpar at Gmail dot com
Description:
------------
Opening a damaged zip archive (7z reports CRC failed for the faulty
file), feof never return true, the script blocks, causing high CPU
usage.
Please contact me to get a zip that produces this problem. I don't see
how can i attach it here
Reproduce code:
---------------
$o = new ZipArchive();
if (! $o->open('test.zip',ZipArchive::CHECKCONS)) {
exit ('error can\'t open');
}
$o->getStream('file2'); // this file is ok
echo "OK";
$r = $o->getStream('file1'); // this file has a wrong crc
while (! feof($r)) {
fread($r,1024);
}
echo "never here\n";
Expected result:
----------------
The script either reads the file ignoring the crc error, or reports the
error, but finishes.
Actual result:
--------------
the script never ends, and uses up the CPU
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=49072&edit=1