From fee16ecad431069400bebb56a30f5b042fd4c363 Mon Sep 17 00:00:00 2001 From: Alexander Wozniak Date: Mon, 30 Nov 2020 13:15:48 +0100 Subject: [PATCH 1/3] Add property in Zend_Loader_ClassMapAutoloaderTest --- tests/Zend/Loader/ClassMapAutoloaderTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/Zend/Loader/ClassMapAutoloaderTest.php b/tests/Zend/Loader/ClassMapAutoloaderTest.php index b394298a5..455f5c8c7 100644 --- a/tests/Zend/Loader/ClassMapAutoloaderTest.php +++ b/tests/Zend/Loader/ClassMapAutoloaderTest.php @@ -36,6 +36,11 @@ */ class Zend_Loader_ClassMapAutoloaderTest extends PHPUnit_Framework_TestCase { + /** + * @var Zend_Loader_ClassMapAutoloader + */ + private $loader; + public static function main() { $suite = new PHPUnit_Framework_TestSuite(__CLASS__); From 6bcaae7be4b260527ccf101f698dfbf6d036afd2 Mon Sep 17 00:00:00 2001 From: Alexander Wozniak Date: Mon, 30 Nov 2020 12:56:14 +0100 Subject: [PATCH 2/3] Do not pass &$parts as reference to resolvePharParentPath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexander Wozniak Signed-off-by: Elan Ruusamäe --- packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php b/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php index a245fbd8a..b7b053126 100644 --- a/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php +++ b/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php @@ -233,7 +233,7 @@ public static function concatPharParts($part) * @param array $parts * @return void */ - public static function resolvePharParentPath($value, $key, &$parts) + public static function resolvePharParentPath($value, $key, $parts) { if ($value !== '...') { return; From 83771262dc6e87c15f2c4cc68ddb36daa817ea84 Mon Sep 17 00:00:00 2001 From: Alexander Wozniak Date: Thu, 3 Dec 2020 13:03:08 +0100 Subject: [PATCH 3/3] Changed call in ClassMapAutoloader to preserve original behaviour In PHP8 the third param of array_walk ($userdata) is automatically passed by value thus calling a function that expects pass by reference as the third param is not possible. Simply changing the array_walk to a foreach loop allows us to fulfill the pass by reference signature. --- .../zend-loader/library/Zend/Loader/ClassMapAutoloader.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php b/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php index b7b053126..52022d0f7 100644 --- a/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php +++ b/packages/zend-loader/library/Zend/Loader/ClassMapAutoloader.php @@ -208,7 +208,10 @@ public static function realPharPath($path) $prependSlash = $parts && $parts[0] === '' ? '/' : ''; $parts = array_values(array_filter($parts, array(__CLASS__, 'concatPharParts'))); - array_walk($parts, array(__CLASS__, 'resolvePharParentPath'), $parts); + foreach ($parts as $key => $value) { + self::resolvePharParentPath($value, $key, $parts); + } + if (file_exists($realPath = 'phar://' . $prependSlash . implode('/', $parts))) { return $realPath; }