1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Disallow asymmetric visibility on static properties

This check was forgotten in the original implementation. Relaxing this
restriction shouldn't be hard, but needs some work. We either need to prevent
merging of cache slots for R/RW/W, or we need to introduce an additional check
when writing to the property indirectly. This check is currently present only
for direct writes.

Closes GH-16462
This commit is contained in:
Ilija Tovilo
2024-10-16 18:58:42 +02:00
parent d70f3ba9a5
commit a8bbc84551
3 changed files with 18 additions and 0 deletions

2
NEWS
View File

@@ -15,6 +15,8 @@ PHP NEWS
. Fixed bug GH-16168 (php 8.1 and earlier crash immediately when compiled
with Xcode 16 clang on macOS 15). (nielsdos)
. Fixed bug GH-16371 (Assertion failure in Zend/zend_weakrefs.c:646). (Arnaud)
. Fixed missing error when adding asymmetric visibility to static properties.
(ilutov)
- Curl:
. Fixed bug GH-16302 (CurlMultiHandle holds a reference to CurlHandle if

View File

@@ -0,0 +1,12 @@
--TEST--
Asymmetric visibility on static props
--FILE--
<?php
class C {
public private(set) static int $prop;
}
?>
--EXPECTF--
Fatal error: Static property may not have asymmetric visibility in %s on line %d

View File

@@ -8598,6 +8598,10 @@ static void zend_compile_prop_decl(zend_ast *ast, zend_ast *type_ast, uint32_t f
zend_error_noreturn(E_COMPILE_ERROR, "Property cannot be both final and private");
}
if ((flags & ZEND_ACC_STATIC) && (flags & ZEND_ACC_PPP_SET_MASK)) {
zend_error_noreturn(E_COMPILE_ERROR, "Static property may not have asymmetric visibility");
}
if (ce->ce_flags & ZEND_ACC_INTERFACE) {
if (flags & ZEND_ACC_FINAL) {
zend_error_noreturn(E_COMPILE_ERROR, "Property in interface cannot be final");