php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52091 ZipArchive: CRC32 errors / corrupted archives not reported
Submitted: 2010-06-15 23:26 UTC Modified: 2017-10-24 07:38 UTC
Votes:3
Avg. Score:4.7 ± 0.5
Reproduced:3 of 3 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (33.3%)
From: hardcorevenom at gmx dot de Assigned:
Status: Open Package: Zip Related
PHP Version: 5.2.13 OS: Linux
Private report: No CVE-ID: None
 [2010-06-15 23:26 UTC] hardcorevenom at gmx dot de
Description:
------------
I corrupted a file using a hex editor.
"echo shell_exec('unzip -t file')" shows the CRC32 mismatch.

ZipArchive::extractTo() doesn't report CRC32 errors.

Reading a stream received from ZipArchive::getStream('myfile') echoes a CRC error if the number of bytes read with one fread() is below 2157 bytes.


Test script:
---------------
$zip = new ZipArchive();
if ($zip->open('test.zip')) {
  zip->extractTo('mydir'); //no error printed

  $fp = $z->getStream('brokenfile');
  while (!feof($fp)) {
    $buf .= fread($fp, 2048+108); //CRC error printed
  }
  $fclose($fp);

  $fp = $z->getStream('brokenfile');
  while (!feof($fp)) {
    $buf .= fread($fp, 2048+109); //CRC error NOT printed
  }
  $fclose($fp);

  zip.close()
}

Expected result:
----------------
A CRC32 error report that can be handled.

The one from "fread($fp, 2048+108)" is fine: "Warning: fread() [function.fread]: Zip stream error: CRC error in ..." (can be handled with "ob_get_contents()");

For "ZipArchive::extractTo()" the corrupt file(s) should be printed.

Actual result:
--------------
CRC32 errors are reported always.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-06-15 23:29 UTC] hardcorevenom at gmx dot de
-Summary: CRC32 Error not reported +Summary: ZipArchive: CRC32 errors / corrupted archives not reported
 [2010-06-15 23:29 UTC] hardcorevenom at gmx dot de
Summary modified.
 [2010-06-16 00:35 UTC] hardcorevenom at gmx dot de
"Actual result" should be
CRC32 errors are reported not always.
 [2010-06-20 17:49 UTC] felipe@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: pajoye
 [2010-06-20 17:57 UTC] pajoye@php.net
-Status: Assigned +Status: Feedback
 [2010-06-20 17:57 UTC] pajoye@php.net
Do you have an archive to reproduce this problem (small if possible :)?
 [2010-06-23 18:38 UTC] hardcorevenom at gmx dot de
-Status: Feedback +Status: Open
 [2010-06-23 18:38 UTC] hardcorevenom at gmx dot de
File "_test.php" is bad in this archive
http://www-user.tu-chemnitz.de/~womar/test/zipview/test_broken.zip

Can be seen here: http://www-user.tu-chemnitz.de/~womar/test/zipview/ziptest.php?file=test_broken.zip
 [2010-06-26 23:38 UTC] felipe@php.net
-Status: Open +Status: Assigned
 [2011-01-31 16:27 UTC] schmale at froglogic dot com
Not the same bug, but related, as "ZipArchive::extractTo" seems to fail in giving a meaningful return value at all.

I used the method and specified an existing directory without write privileges, and got TRUE as return value (although "ZipArchive::extractTo" didn't do anything, due to lack of write privileges).
 [2011-01-31 16:54 UTC] pajoye@php.net
@schmale at froglogic dot com

If it is not the same then please open a new bug. Please provide both a script and 
an archive to reproduce your problem.
 [2016-09-06 15:30 UTC] cmb@php.net
I can reproduce that ::extractTo() doesn't fail if the CRC32 of
the file is wrong. However, passing ZipArchive::CHECKCONS to
::open() lets this method fail with ZipArchive::ER_INCONS, so it
seems the behavior is desired.

IMO, that's a documentation issue.
 [2017-10-24 07:38 UTC] kalle@php.net
-Status: Assigned +Status: Open -Assigned To: pajoye +Assigned To:
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Oct 05 21:01:27 2024 UTC