Skip to content

Commit afc69e4

Browse files
committed
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix memory leak in Phar::webPhar() on Windows
2 parents dd33535 + 5c96373 commit afc69e4

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

ext/phar/phar_object.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ PHP_METHOD(Phar, webPhar)
609609
if (NULL == (z_script_name = zend_hash_str_find(_server, "SCRIPT_NAME", sizeof("SCRIPT_NAME")-1)) ||
610610
IS_STRING != Z_TYPE_P(z_script_name) ||
611611
!strstr(Z_STRVAL_P(z_script_name), basename)) {
612-
return;
612+
goto finish;
613613
}
614614

615615
if (NULL != (z_path_info = zend_hash_str_find(_server, "PATH_INFO", sizeof("PATH_INFO")-1)) &&
@@ -634,7 +634,7 @@ PHP_METHOD(Phar, webPhar)
634634
testit = sapi_getenv("SCRIPT_NAME", sizeof("SCRIPT_NAME")-1);
635635
if (!(pt = strstr(testit, basename))) {
636636
efree(testit);
637-
return;
637+
goto finish;
638638
}
639639

640640
path_info = sapi_getenv("PATH_INFO", sizeof("PATH_INFO")-1);
@@ -659,7 +659,7 @@ PHP_METHOD(Phar, webPhar)
659659

660660
if (!(pt = strstr(path_info, basename))) {
661661
/* this can happen with rewrite rules - and we have no idea what to do then, so return */
662-
return;
662+
goto finish;
663663
}
664664

665665
entry_len = strlen(path_info);
@@ -707,7 +707,6 @@ PHP_METHOD(Phar, webPhar)
707707
efree(pt);
708708

709709
zend_bailout();
710-
return;
711710
default:
712711
zend_throw_exception_ex(phar_ce_PharException, 0, "phar error: rewrite callback must return a string or false");
713712

@@ -718,6 +717,9 @@ PHP_METHOD(Phar, webPhar)
718717
}
719718
efree(entry);
720719
efree(pt);
720+
#ifdef PHP_WIN32
721+
efree(fname);
722+
#endif
721723
RETURN_THROWS();
722724
}
723725
}
@@ -791,9 +793,6 @@ PHP_METHOD(Phar, webPhar)
791793
if (FAILURE == phar_get_archive(&phar, fname, fname_len, NULL, 0, NULL) ||
792794
(info = phar_get_entry_info(phar, entry, entry_len, NULL, 0)) == NULL) {
793795
phar_do_404(phar, fname, fname_len, f404, f404_len, entry, entry_len);
794-
#ifdef PHP_WIN32
795-
efree(fname);
796-
#endif
797796
zend_bailout();
798797
}
799798

@@ -847,6 +846,11 @@ PHP_METHOD(Phar, webPhar)
847846
code = phar_file_type(&PHAR_G(mime_types), entry, &mime_type);
848847
}
849848
phar_file_action(phar, info, mime_type, code, entry, entry_len, fname, pt, ru, ru_len);
849+
850+
finish: ;
851+
#ifdef PHP_WIN32
852+
efree(fname);
853+
#endif
850854
}
851855
/* }}} */
852856

0 commit comments

Comments
 (0)