Skip to content

Commit fdbe910

Browse files
authored
Fix indirect readonly error messages (#14979)
$obj->ro[] = 42;, passByRef($obj->ro); and the likes should emit an indirect modification error message. This message already existed but was used inconsistently.
1 parent 71c520c commit fdbe910

11 files changed

+28
-28
lines changed

Zend/tests/enum/no-pass-properties-by-ref.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ var_dump(Foo::Bar->value);
2222

2323
?>
2424
--EXPECT--
25-
Cannot modify readonly property Foo::$value
25+
Cannot indirectly modify readonly property Foo::$value
2626
int(0)

Zend/tests/enum/no-return-properties-by-ref.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ var_dump(Foo::Bar->value);
2323

2424
?>
2525
--EXPECT--
26-
Cannot modify readonly property Foo::$value
26+
Cannot indirectly modify readonly property Foo::$value
2727
int(0)

Zend/tests/enum/no-write-properties-through-foreach-reference.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ var_dump(Foo::Bar->value);
1818

1919
?>
2020
--EXPECT--
21-
Cannot modify readonly property Foo::$value
21+
Cannot indirectly modify readonly property Foo::$value
2222
int(0)

Zend/tests/enum/no-write-properties-through-references.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ var_dump(Foo::Bar->value);
1919

2020
?>
2121
--EXPECT--
22-
Cannot modify readonly property Foo::$value
22+
Cannot indirectly modify readonly property Foo::$value
2323
int(0)

Zend/tests/readonly_props/cache_slot.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,35 +88,35 @@ $replaceProp3();
8888
var_dump($test->prop3);
8989

9090
?>
91-
--EXPECT--
91+
--EXPECTF--
9292
string(1) "a"
9393
Cannot modify readonly property Test::$prop
9494
string(1) "a"
9595

96-
Cannot modify readonly property Test::$prop2
96+
Cannot indirectly modify readonly property Test::$prop2
9797
Cannot modify readonly property Test::$prop2
9898
array(0) {
9999
}
100100

101-
object(stdClass)#3 (1) {
101+
object(stdClass)#%d (1) {
102102
["foo"]=>
103103
int(1)
104104
}
105-
object(stdClass)#3 (1) {
105+
object(stdClass)#%d (1) {
106106
["foo"]=>
107107
int(1)
108108
}
109109

110-
Cannot modify readonly property Test::$prop2
111-
Cannot modify readonly property Test::$prop2
110+
Cannot indirectly modify readonly property Test::$prop2
111+
Cannot indirectly modify readonly property Test::$prop2
112112
array(0) {
113113
}
114114

115-
object(stdClass)#5 (1) {
115+
object(stdClass)#%d (1) {
116116
["foo"]=>
117117
int(1)
118118
}
119-
object(stdClass)#5 (1) {
119+
object(stdClass)#%d (1) {
120120
["foo"]=>
121121
int(1)
122122
}

Zend/tests/readonly_props/readonly_clone_error5.phpt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,20 @@ try {
5757
}
5858

5959
?>
60-
--EXPECT--
61-
object(TestSetOnce)#2 (1) {
60+
--EXPECTF--
61+
object(TestSetOnce)#%d (1) {
6262
["prop"]=>
6363
array(1) {
6464
[0]=>
6565
int(1)
6666
}
6767
}
68-
object(TestSetOnce)#1 (1) {
68+
object(TestSetOnce)#%d (1) {
6969
["prop"]=>
7070
array(1) {
7171
[0]=>
7272
int(1)
7373
}
7474
}
75-
Cannot modify readonly property TestSetTwice::$prop
76-
Cannot modify readonly property TestSetTwice::$prop
75+
Cannot indirectly modify readonly property TestSetTwice::$prop
76+
Cannot indirectly modify readonly property TestSetTwice::$prop

Zend/tests/readonly_props/readonly_modification.phpt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ Cannot modify readonly property Test::$prop
7373
Cannot modify readonly property Test::$prop
7474
Cannot modify readonly property Test::$prop
7575
Cannot modify readonly property Test::$prop
76-
Cannot modify readonly property Test::$prop
77-
Cannot modify readonly property Test::$prop
78-
Cannot modify readonly property Test::$prop
76+
Cannot indirectly modify readonly property Test::$prop
77+
Cannot indirectly modify readonly property Test::$prop
78+
Cannot indirectly modify readonly property Test::$prop
7979
array(0) {
8080
}
81-
Cannot modify readonly property Test::$prop2
82-
Cannot modify readonly property Test::$prop2
81+
Cannot indirectly modify readonly property Test::$prop2
82+
Cannot indirectly modify readonly property Test::$prop2

Zend/tests/readonly_props/variation.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ foreach ([true, false] as $init) {
9595
Init: 1, scope: 1, op: r: 1
9696
Init: 1, scope: 1, op: w: Cannot modify readonly property Test::$prop
9797
Init: 1, scope: 1, op: rw: Cannot modify readonly property Test::$prop
98-
Init: 1, scope: 1, op: im: Cannot modify readonly property Test::$prop
98+
Init: 1, scope: 1, op: im: Cannot indirectly modify readonly property Test::$prop
9999
Init: 1, scope: 1, op: is: 1
100100
Init: 1, scope: 1, op: us: Cannot unset readonly property Test::$prop
101101
Init: 1, scope: 0, op: r: 1
102102
Init: 1, scope: 0, op: w: Cannot modify readonly property Test::$prop
103103
Init: 1, scope: 0, op: rw: Cannot modify readonly property Test::$prop
104-
Init: 1, scope: 0, op: im: Cannot modify readonly property Test::$prop
104+
Init: 1, scope: 0, op: im: Cannot indirectly modify readonly property Test::$prop
105105
Init: 1, scope: 0, op: is: 1
106106
Init: 1, scope: 0, op: us: Cannot unset readonly property Test::$prop
107107
Init: 0, scope: 1, op: r: Typed property Test::$prop must not be accessed before initialization

Zend/zend_execute.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3367,7 +3367,7 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
33673367
} else if (Z_PROP_FLAG_P(ptr) & IS_PROP_REINITABLE) {
33683368
Z_PROP_FLAG_P(ptr) &= ~IS_PROP_REINITABLE;
33693369
} else {
3370-
zend_readonly_property_modification_error(prop_info);
3370+
zend_readonly_property_indirect_modification_error(prop_info);
33713371
ZVAL_ERROR(result);
33723372
}
33733373
return;

Zend/zend_object_handlers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ ZEND_API zval *zend_std_read_property(zend_object *zobj, zend_string *name, int
697697
} else if (Z_PROP_FLAG_P(retval) & IS_PROP_REINITABLE) {
698698
Z_PROP_FLAG_P(retval) &= ~IS_PROP_REINITABLE;
699699
} else {
700-
zend_readonly_property_modification_error(prop_info);
700+
zend_readonly_property_indirect_modification_error(prop_info);
701701
retval = &EG(uninitialized_zval);
702702
}
703703
}

ext/opcache/jit/zend_jit_ir.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13959,7 +13959,7 @@ static int zend_jit_fetch_obj(zend_jit_ctx *jit,
1395913959
ir_IF_FALSE(if_reinitable);
1396013960

1396113961
jit_SET_EX_OPLINE(jit, opline);
13962-
ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_readonly_property_modification_error), prop_info_ref);
13962+
ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_readonly_property_indirect_modification_error), prop_info_ref);
1396313963
jit_set_Z_TYPE_INFO(jit, res_addr, _IS_ERROR);
1396413964
ir_END_list(end_inputs);
1396513965

@@ -14033,7 +14033,7 @@ static int zend_jit_fetch_obj(zend_jit_ctx *jit,
1403314033

1403414034
ir_IF_FALSE(if_reinitable);
1403514035
jit_SET_EX_OPLINE(jit, opline);
14036-
ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_readonly_property_modification_error), ir_CONST_ADDR(prop_info));
14036+
ir_CALL_1(IR_VOID, ir_CONST_FC_FUNC(zend_readonly_property_indirect_modification_error), ir_CONST_ADDR(prop_info));
1403714037
jit_set_Z_TYPE_INFO(jit, res_addr, _IS_ERROR);
1403814038
ir_END_list(end_inputs);
1403914039

0 commit comments

Comments
 (0)