Edit report at http://bugs.php.net/bug.php?id=49072&edit=1
ID: 49072 Updated by: rquadl...@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] paj...@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] s...@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] s...@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] paj...@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