Skip to content

Commit ef42a7a

Browse files
committed
fix use after free
1 parent ed998f8 commit ef42a7a

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

ext/zip/php_zip.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,26 +1503,26 @@ static ZIPARCHIVE_METHOD(close)
15031503
ze_obj = Z_ZIP_P(self);
15041504

15051505
err = zip_close(intern);
1506-
1507-
/* Save error for property reader */
1508-
#if LIBZIP_VERSION_MAJOR < 1
1509-
zip_error_get(obj->za, &ze_obj->err_zip, &ze_obj->err_sys);
1510-
#else
1511-
{
1512-
zip_error_t *ziperr;
1513-
1514-
ziperr = zip_get_error(intern);
1515-
ze_obj->err_zip = zip_error_code_zip(ziperr);
1516-
ze_obj->err_sys = zip_error_code_system(ziperr);
1517-
zip_error_fini(ziperr);
1518-
}
1519-
#endif
1520-
15211506
if (err) {
15221507
#if LIBZIP_VERSION_MAJOR == 1 && LIBZIP_VERSION_MINOR == 3 && LIBZIP_VERSION_MICRO == 1
15231508
php_error_docref(NULL, E_WARNING, "zip_close have failed");
1509+
ze_obj->err_zip = 0;
1510+
ze_obj->err_sys = 0;
15241511
#else
15251512
php_error_docref(NULL, E_WARNING, "%s", zip_strerror(intern));
1513+
/* Save error for property reader */
1514+
#if LIBZIP_VERSION_MAJOR < 1
1515+
zip_error_get(intern, &ze_obj->err_zip, &ze_obj->err_sys);
1516+
#else
1517+
{
1518+
zip_error_t *ziperr;
1519+
1520+
ziperr = zip_get_error(intern);
1521+
ze_obj->err_zip = zip_error_code_zip(ziperr);
1522+
ze_obj->err_sys = zip_error_code_system(ziperr);
1523+
zip_error_fini(ziperr);
1524+
}
1525+
#endif
15261526
zip_discard(intern);
15271527
#endif
15281528
}

0 commit comments

Comments
 (0)