diff options
author | Remi Collet <remi@php.net> | 2020-03-09 09:19:57 +0100 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2020-03-09 09:19:57 +0100 |
commit | ef42a7afa502005ab5732614a288476146e43eae (patch) | |
tree | d5d6762540e17bb87b068cbff10968a73a0a416c /ext/zip/php_zip.c | |
parent | ed998f8a0dc727be21b3a4b10841c10dbafe5e6d (diff) | |
download | php-git-ef42a7afa502005ab5732614a288476146e43eae.tar.gz |
fix use after free
Diffstat (limited to 'ext/zip/php_zip.c')
-rw-r--r-- | ext/zip/php_zip.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index e7ca9cb477..d8e1f285a9 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -1503,26 +1503,26 @@ static ZIPARCHIVE_METHOD(close) ze_obj = Z_ZIP_P(self); err = zip_close(intern); - - /* Save error for property reader */ -#if LIBZIP_VERSION_MAJOR < 1 - zip_error_get(obj->za, &ze_obj->err_zip, &ze_obj->err_sys); -#else - { - zip_error_t *ziperr; - - ziperr = zip_get_error(intern); - ze_obj->err_zip = zip_error_code_zip(ziperr); - ze_obj->err_sys = zip_error_code_system(ziperr); - zip_error_fini(ziperr); - } -#endif - if (err) { #if LIBZIP_VERSION_MAJOR == 1 && LIBZIP_VERSION_MINOR == 3 && LIBZIP_VERSION_MICRO == 1 php_error_docref(NULL, E_WARNING, "zip_close have failed"); + ze_obj->err_zip = 0; + ze_obj->err_sys = 0; #else php_error_docref(NULL, E_WARNING, "%s", zip_strerror(intern)); + /* Save error for property reader */ + #if LIBZIP_VERSION_MAJOR < 1 + zip_error_get(intern, &ze_obj->err_zip, &ze_obj->err_sys); + #else + { + zip_error_t *ziperr; + + ziperr = zip_get_error(intern); + ze_obj->err_zip = zip_error_code_zip(ziperr); + ze_obj->err_sys = zip_error_code_system(ziperr); + zip_error_fini(ziperr); + } + #endif zip_discard(intern); #endif } |