[php-src] Issue #13185: Unexpected Error in ZipArchive::close
| From: | oleibman | Date: | Thu, 18 Jan 2024 03:18:16 +0000 |
| Subject: | [php-src] Issue #13185: Unexpected Error in ZipArchive::close | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-246287@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/13185
Author: oleibman
### Description
There seems to have been a change between Php7 and Php8 whereby ZipArchive::close can issue a fatal
error rather than a warning. This is a big change in behavior. Was it intended? Nothing in the
documentation for the method suggests an error, let alone a fatal error, can be issued. The second
close below is obviously wrong and should return false, but why should it be treated as
fatal?
The following code:
```php
<?php
$zip = new ZipArchive();
$res = $zip->open('zzip.zip', ZipArchive::OVERWRITE | ZipArchive::CREATE);
if ($res !== true) {
echo "open failed result=$res\n";
exit(1);
}
$zip->addFromString('test.txt', 'file content goes here');
$zip->close();
$x = @$zip->close();
var_dump($x);
```
Resulted in this output:
```
Fatal error: Uncaught ValueError: Invalid or uninitialized Zip object in C:\git\zzip.php on line 10
ValueError: Invalid or uninitialized Zip object in C:\git\zzip.php on line 10
Call Stack:
0.0002 394520 1. {main}() C:\git\zzip.php:0
0.0085 395152 2. ZipArchive->close() C:\git\zzip.php:10
```
But I expected this output instead (as with Php7):
```
C:\git\zzip.php:11:
bool(false)
```
### PHP Version
All Php8
### Operating System
Windows, but probably all