File tree Expand file tree Collapse file tree 3 files changed +39
-3
lines changed Expand file tree Collapse file tree 3 files changed +39
-3
lines changed Original file line number Diff line number Diff line change @@ -1616,6 +1616,7 @@ static ZIPARCHIVE_METHOD(close)
1616
1616
struct zip * intern ;
1617
1617
zval * this = getThis ();
1618
1618
ze_zip_object * ze_obj ;
1619
+ int err ;
1619
1620
1620
1621
if (!this ) {
1621
1622
RETURN_FALSE ;
@@ -1625,7 +1626,8 @@ static ZIPARCHIVE_METHOD(close)
1625
1626
1626
1627
ze_obj = (ze_zip_object * ) zend_object_store_get_object (this TSRMLS_CC );
1627
1628
1628
- if (zip_close (intern )) {
1629
+ if (err = zip_close (intern )) {
1630
+ php_error_docref (NULL TSRMLS_CC , E_WARNING , zip_strerror (intern ));
1629
1631
zip_discard (intern );
1630
1632
}
1631
1633
@@ -1634,7 +1636,11 @@ static ZIPARCHIVE_METHOD(close)
1634
1636
ze_obj -> filename_len = 0 ;
1635
1637
ze_obj -> za = NULL ;
1636
1638
1637
- RETURN_TRUE ;
1639
+ if (!err ) {
1640
+ RETURN_TRUE ;
1641
+ } else {
1642
+ RETURN_FALSE ;
1643
+ }
1638
1644
}
1639
1645
/* }}} */
1640
1646
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #70322 (ZipArchive::close() doesn't indicate errors)
3
+ --DESCRIPTION--
4
+ We want to test whether ZipArchive::close() returns FALSE and raises a warning
5
+ on failure, so we force the failure by adding a file to the archive, which we
6
+ delete before closing.
7
+ --SKIPIF--
8
+ <?php
9
+ if (!extension_loaded ('zip ' )) die ('skip requires zip extension ' );
10
+ ?>
11
+ --FILE--
12
+ <?php
13
+ $ zipfile = __DIR__ . '/bug70322.zip ' ;
14
+ $ textfile = __DIR__ . '/bug70322.txt ' ;
15
+ touch ($ textfile );
16
+ $ zip = new ZipArchive ();
17
+ $ zip ->open ($ zipfile , ZipArchive::CREATE );
18
+ $ zip ->addFile ($ textfile );
19
+ unlink ($ textfile );
20
+ var_dump ($ zip ->close ());
21
+ ?>
22
+ --CLEAN--
23
+ <?php
24
+ // we don't expect the archive to be created, but clean up just in case...
25
+ @unlink (__DIR__ . '/bug70322.zip ' );
26
+ ?>
27
+ --EXPECTF--
28
+ Warning: ZipArchive::close(): Read error: No such file or directory in %s%ebug70322.php on line %d
29
+ bool(false)
Original file line number Diff line number Diff line change @@ -63,7 +63,8 @@ $sb = $zip->statIndex(1);
63
63
var_dump ($ sb );
64
64
$ sb = $ zip ->statIndex (2 );
65
65
var_dump ($ sb );
66
- $ zip ->close ();
66
+ // suppress irrelevant error message:
67
+ @$ zip ->close ();
67
68
unset($ zip );
68
69
69
70
if (file_exists ($ file )) {
You can’t perform that action at this time.
0 commit comments