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:
2
NEWS
2
NEWS
@@ -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
|
||||
|
||||
12
Zend/tests/asymmetric_visibility/static_props.phpt
Normal file
12
Zend/tests/asymmetric_visibility/static_props.phpt
Normal 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
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user