1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00
Files
archived-php-src/Zend/tests/readonly_props/readonly_clone_error5.phpt
Ilija Tovilo 46ee0fb304 Disallow indirect modification on readonly properties within __clone() (#15012)
Indirect modification isn't allowed in __construct() because it allows
references to leak, so it doesn't make much sense to allow it in __clone().
2024-08-09 11:56:16 +02:00

65 lines
1.2 KiB
PHP

--TEST--
Readonly property clone indirect variation for JIT
--FILE--
<?php
trait CloneSetOnceTrait {
public function __clone() {
$this->prop[] = 1;
}
}
trait CloneSetTwiceTrait {
public function __clone() {
$this->prop[] = 1;
$this->prop[] = 2;
}
}
class TestSetOnce {
use CloneSetOnceTrait;
public readonly array $prop;
public function __construct() {
$this->prop = [];
}
}
class TestSetTwice {
use CloneSetTwiceTrait;
public readonly array $prop;
public function __construct() {
$this->prop = [];
}
}
try {
var_dump(clone (new TestSetOnce()));
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
try {
var_dump(clone (new TestSetOnce()));
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
try {
var_dump(clone (new TestSetTwice()));
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
try {
var_dump(clone (new TestSetTwice()));
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECT--
Cannot indirectly modify readonly property TestSetOnce::$prop
Cannot indirectly modify readonly property TestSetOnce::$prop
Cannot indirectly modify readonly property TestSetTwice::$prop
Cannot indirectly modify readonly property TestSetTwice::$prop