diff --git a/NEWS b/NEWS index 6b952a829eb..3c239030e52 100644 --- a/NEWS +++ b/NEWS @@ -44,6 +44,8 @@ PHP NEWS - Phar: . Fix memory leak and invalid continuation after tar header writing fails. (nielsdos) + . Fix memory leaks when creating temp file fails when applying zip signature. + (nielsdos) - SimpleXML: . Fixed bug GH-19988 (zend_string_init with NULL pointer in simplexml (UB)). diff --git a/ext/phar/zip.c b/ext/phar/zip.c index 5c7cd08bd63..9a98b541ff6 100644 --- a/ext/phar/zip.c +++ b/ext/phar/zip.c @@ -1223,7 +1223,9 @@ static int phar_zip_applysignature(phar_archive_data *phar, struct _phar_zip_pas entry.fp_type = PHAR_MOD; entry.is_modified = 1; if (entry.fp == NULL) { + efree(signature); spprintf(pass->error, 0, "phar error: unable to create temporary file for signature"); + php_stream_close(newfile); return FAILURE; } @@ -1441,11 +1443,12 @@ fperror: phar_metadata_tracker_try_ensure_has_serialized_data(&phar->metadata_tracker, phar->is_persistent); if (temperr) { +temperror: if (error) { spprintf(error, 4096, "phar zip flush of \"%s\" failed: %s", phar->fname, temperr); } efree(temperr); -temperror: +notemperror: php_stream_close(pass.centralfp); nocentralerror: php_stream_close(pass.filefp); @@ -1473,7 +1476,7 @@ nocentralerror: if (error) { spprintf(error, 4096, "phar zip flush of \"%s\" failed: unable to write central-directory", phar->fname); } - goto temperror; + goto notemperror; } }