Skip to content

Commit 80497ea

Browse files
committed
Merge branch 'PHP-5.4'
2 parents 07c61c2 + 302ad0d commit 80497ea

3 files changed

Lines changed: 59 additions & 13 deletions

File tree

Zend/tests/bug62653.phpt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
--TEST--
2+
Bug #62653: unset($array[$float]) causes a crash
3+
--FILE--
4+
<?php
5+
$array = array("5"=>"bar");
6+
$foo = "10.0000"; // gettype($foo) = "string"
7+
$foo /= 2; //Makes $foo = 5 but still gettype($foo) = "double"
8+
unset($array[$foo]);
9+
print_r($array);
10+
11+
$array = array("5"=>"bar");
12+
$foo = "5";
13+
unset($array[(float)$foo]);
14+
print_r($array);
15+
16+
$array = array("5"=>"bar");
17+
$foo = "10.0000";
18+
$foo /= 2; //Makes $foo = 5 but still gettype($foo) = "double"
19+
$name = "foo";
20+
unset($array[$$name]);
21+
print_r($array);
22+
23+
?>
24+
--EXPECT--
25+
Array
26+
(
27+
)
28+
Array
29+
(
30+
)
31+
Array
32+
(
33+
)

Zend/zend_vm_def.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3956,7 +3956,8 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
39563956
switch (Z_TYPE_P(offset)) {
39573957
case IS_DOUBLE:
39583958
hval = zend_dval_to_lval(Z_DVAL_P(offset));
3959-
ZEND_VM_C_GOTO(num_index_dim);
3959+
zend_hash_index_del(ht, hval);
3960+
break;
39603961
case IS_RESOURCE:
39613962
case IS_BOOL:
39623963
case IS_LONG:

Zend/zend_vm_execute.h

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14166,7 +14166,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
1416614166
switch (Z_TYPE_P(offset)) {
1416714167
case IS_DOUBLE:
1416814168
hval = zend_dval_to_lval(Z_DVAL_P(offset));
14169-
goto num_index_dim;
14169+
zend_hash_index_del(ht, hval);
14170+
break;
1417014171
case IS_RESOURCE:
1417114172
case IS_BOOL:
1417214173
case IS_LONG:
@@ -16177,7 +16178,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLE
1617716178
switch (Z_TYPE_P(offset)) {
1617816179
case IS_DOUBLE:
1617916180
hval = zend_dval_to_lval(Z_DVAL_P(offset));
16180-
goto num_index_dim;
16181+
zend_hash_index_del(ht, hval);
16182+
break;
1618116183
case IS_RESOURCE:
1618216184
case IS_BOOL:
1618316185
case IS_LONG:
@@ -18398,7 +18400,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
1839818400
switch (Z_TYPE_P(offset)) {
1839918401
case IS_DOUBLE:
1840018402
hval = zend_dval_to_lval(Z_DVAL_P(offset));
18401-
goto num_index_dim;
18403+
zend_hash_index_del(ht, hval);
18404+
break;
1840218405
case IS_RESOURCE:
1840318406
case IS_BOOL:
1840418407
case IS_LONG:
@@ -21442,7 +21445,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER
2144221445
switch (Z_TYPE_P(offset)) {
2144321446
case IS_DOUBLE:
2144421447
hval = zend_dval_to_lval(Z_DVAL_P(offset));
21445-
goto num_index_dim;
21448+
zend_hash_index_del(ht, hval);
21449+
break;
2144621450
case IS_RESOURCE:
2144721451
case IS_BOOL:
2144821452
case IS_LONG:
@@ -22780,7 +22784,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_H
2278022784
switch (Z_TYPE_P(offset)) {
2278122785
case IS_DOUBLE:
2278222786
hval = zend_dval_to_lval(Z_DVAL_P(offset));
22783-
goto num_index_dim;
22787+
zend_hash_index_del(ht, hval);
22788+
break;
2278422789
case IS_RESOURCE:
2278522790
case IS_BOOL:
2278622791
case IS_LONG:
@@ -23938,7 +23943,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HAN
2393823943
switch (Z_TYPE_P(offset)) {
2393923944
case IS_DOUBLE:
2394023945
hval = zend_dval_to_lval(Z_DVAL_P(offset));
23941-
goto num_index_dim;
23946+
zend_hash_index_del(ht, hval);
23947+
break;
2394223948
case IS_RESOURCE:
2394323949
case IS_BOOL:
2394423950
case IS_LONG:
@@ -25096,7 +25102,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HAN
2509625102
switch (Z_TYPE_P(offset)) {
2509725103
case IS_DOUBLE:
2509825104
hval = zend_dval_to_lval(Z_DVAL_P(offset));
25099-
goto num_index_dim;
25105+
zend_hash_index_del(ht, hval);
25106+
break;
2510025107
case IS_RESOURCE:
2510125108
case IS_BOOL:
2510225109
case IS_LONG:
@@ -26520,7 +26527,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HAND
2652026527
switch (Z_TYPE_P(offset)) {
2652126528
case IS_DOUBLE:
2652226529
hval = zend_dval_to_lval(Z_DVAL_P(offset));
26523-
goto num_index_dim;
26530+
zend_hash_index_del(ht, hval);
26531+
break;
2652426532
case IS_RESOURCE:
2652526533
case IS_BOOL:
2652626534
case IS_LONG:
@@ -29783,7 +29791,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDL
2978329791
switch (Z_TYPE_P(offset)) {
2978429792
case IS_DOUBLE:
2978529793
hval = zend_dval_to_lval(Z_DVAL_P(offset));
29786-
goto num_index_dim;
29794+
zend_hash_index_del(ht, hval);
29795+
break;
2978729796
case IS_RESOURCE:
2978829797
case IS_BOOL:
2978929798
case IS_LONG:
@@ -31665,7 +31674,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER
3166531674
switch (Z_TYPE_P(offset)) {
3166631675
case IS_DOUBLE:
3166731676
hval = zend_dval_to_lval(Z_DVAL_P(offset));
31668-
goto num_index_dim;
31677+
zend_hash_index_del(ht, hval);
31678+
break;
3166931679
case IS_RESOURCE:
3167031680
case IS_BOOL:
3167131681
case IS_LONG:
@@ -33756,7 +33766,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER
3375633766
switch (Z_TYPE_P(offset)) {
3375733767
case IS_DOUBLE:
3375833768
hval = zend_dval_to_lval(Z_DVAL_P(offset));
33759-
goto num_index_dim;
33769+
zend_hash_index_del(ht, hval);
33770+
break;
3376033771
case IS_RESOURCE:
3376133772
case IS_BOOL:
3376233773
case IS_LONG:
@@ -36531,7 +36542,8 @@ static int ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_
3653136542
switch (Z_TYPE_P(offset)) {
3653236543
case IS_DOUBLE:
3653336544
hval = zend_dval_to_lval(Z_DVAL_P(offset));
36534-
goto num_index_dim;
36545+
zend_hash_index_del(ht, hval);
36546+
break;
3653536547
case IS_RESOURCE:
3653636548
case IS_BOOL:
3653736549
case IS_LONG:

0 commit comments

Comments
 (0)