[wp-trac] [WordPress Trac] #59467: Close ZIP archives before returning in `_unzip_file_ziparchive()`.

WordPress Trac noreply at wordpress.org
Tue Sep 26 21:18:49 UTC 2023


#59467: Close ZIP archives before returning in `_unzip_file_ziparchive()`.
----------------------------+-----------------------
 Reporter:  costdev         |      Owner:  costdev
     Type:  defect (bug)    |     Status:  assigned
 Priority:  normal          |  Milestone:  6.4
Component:  Filesystem API  |    Version:  3.0
 Severity:  normal          |   Keywords:  has-patch
  Focuses:  performance     |
----------------------------+-----------------------
 In [https://github.com/WordPress/wordpress-
 develop/blob/7cf8998e4658f22570e12f04c53817472bbc744e/src/wp-
 admin/includes/file.php#L1658C5-L1658C5 _unzip_file_ziparchive()], the
 archive is opened, but there are several returns that don't close the
 archive beforehand.

 From the PHP manual on `ZipArchive::close()`:
 > This method is automatically called at the end of the script.
 > [https://www.php.net/manual/en/ziparchive.close.php Reference]

 and from the documentation for the underlying `zip_close()` from libzip:
 > If successful, archive is freed. Otherwise archive is left unchanged and
 must still be freed.
 > [https://libzip.org/documentation/zip_close.html Reference]

 As this function is used during installation and upgrade processes which
 are memory-intensive, let's free the archive before each of the `return`
 statements, rather than waiting until the end of the script.

 Note: The `return` that gets used as a result of `true !== $zopen` does
 not need a call to `$z-close()`, as freeing the archive is
 [https://github.com/nih-at/libzip/blob/main/lib/zip_open.c#L62-L73 handled
 internally] by libzip's `zip_open()`.

 -----

 - Originally introduced in [13005].
 - Follow-up to: [13005], [13006], [13015], [13221], [14346] [25779].

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/59467>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list