diff options
author | Remi Collet <remi@remirepo.net> | 2024-06-07 17:21:26 +0200 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2024-06-07 17:21:26 +0200 |
commit | 71a38958f602c4e5057ed2c95e4e5c5613d0e341 (patch) | |
tree | 439b970b718c8be4967d6f021f437b982dbe4919 /php-gh14480.patch | |
parent | 1ab9a9ffc372334e3c063034087159eaa2b48093 (diff) |
Fix GH-14480 Method visibility issue introduced in version 8.2.20
Diffstat (limited to 'php-gh14480.patch')
-rw-r--r-- | php-gh14480.patch | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/php-gh14480.patch b/php-gh14480.patch new file mode 100644 index 0000000..7920e17 --- /dev/null +++ b/php-gh14480.patch @@ -0,0 +1,99 @@ +From 86b93bc479477e6c0de6207bfe59c1e276dfdafb Mon Sep 17 00:00:00 2001 +From: Dmitry Stogov <dmitry@zend.com> +Date: Wed, 5 Jun 2024 23:53:31 +0300 +Subject: [PATCH] Fix GH-14480: Method visibility issue introduced in version + 8.3.8 (#14484) + +--- + Zend/tests/gh14480.phpt | 60 +++++++++++++++++++++++++++++++++++++++++ + Zend/zend_inheritance.c | 8 +++--- + 2 files changed, 65 insertions(+), 3 deletions(-) + create mode 100644 Zend/tests/gh14480.phpt + +diff --git a/Zend/tests/gh14480.phpt b/Zend/tests/gh14480.phpt +new file mode 100644 +index 0000000000000..bab74785b6b23 +--- /dev/null ++++ b/Zend/tests/gh14480.phpt +@@ -0,0 +1,60 @@ ++--TEST-- ++GH-14480: Method visibility issue ++--FILE-- ++<?php ++trait PropertyHelperTrait ++{ ++ protected function splitPropertyParts(): void ++ { ++ echo "OK\n"; ++ } ++} ++ ++trait OrmPropertyHelperTrait ++{ ++ abstract protected function splitPropertyParts(): void; ++ ++ protected function addJoinsForNestedProperty(): void ++ { ++ $this->splitPropertyParts(); ++ } ++} ++ ++trait SearchFilterTrait ++{ ++ use PropertyHelperTrait; ++} ++ ++abstract class AbstractFilter ++{ ++ use OrmPropertyHelperTrait, PropertyHelperTrait; ++ ++ public function apply(): void ++ { ++ $this->filterProperty(); ++ } ++ ++ abstract protected function filterProperty(): void; ++} ++ ++class SearchFilter extends AbstractFilter ++{ ++ use SearchFilterTrait; ++ protected function filterProperty(): void ++ { ++ $this->addJoinsForNestedProperty(); ++ } ++} ++ ++class FilterExtension ++{ ++ public function applyToCollection(): void ++ { ++ (new SearchFilter())->apply(); ++ } ++} ++ ++(new FilterExtension)->applyToCollection(); ++?> ++--EXPECT-- ++OK +diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c +index 8c7ea963891bf..2e9bf25b59c48 100644 +--- a/Zend/zend_inheritance.c ++++ b/Zend/zend_inheritance.c +@@ -1933,11 +1933,13 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_ + if (check_inheritance) { + /* Inherited members are overridden by members inserted by traits. + * Check whether the trait method fulfills the inheritance requirements. */ ++ uint32_t flags = ZEND_INHERITANCE_CHECK_PROTO | ZEND_INHERITANCE_CHECK_VISIBILITY; ++ if (!(existing_fn->common.scope->ce_flags & ZEND_ACC_TRAIT)) { ++ flags |= ZEND_INHERITANCE_SET_CHILD_CHANGED |ZEND_INHERITANCE_SET_CHILD_PROTO; ++ } + do_inheritance_check_on_method( + fn, fixup_trait_scope(fn, ce), existing_fn, fixup_trait_scope(existing_fn, ce), +- ce, NULL, +- ZEND_INHERITANCE_CHECK_PROTO | ZEND_INHERITANCE_CHECK_VISIBILITY | +- ZEND_INHERITANCE_SET_CHILD_CHANGED| ZEND_INHERITANCE_SET_CHILD_PROTO); ++ ce, NULL, flags); + } + } + /* }}} */ |