Skip to content

Commit e24c24c

Browse files
committed
Fix bug #68162: isset($$varname) always true
1 parent 2a0c4ed commit e24c24c

File tree

3 files changed

+53
-39
lines changed

3 files changed

+53
-39
lines changed

Zend/tests/bug68162.phpt

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Bug #68162: isset($$varname) always true
3+
--FILE--
4+
<?php
5+
6+
$name = 'var';
7+
var_dump(isset($$name));
8+
$var = 42;
9+
var_dump(isset($$name));
10+
11+
?>
12+
--EXPECT--
13+
bool(false)
14+
bool(true)

Zend/zend_vm_def.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -4855,7 +4855,6 @@ ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMP|VAR|CV, UNUSED|CONST|VAR)
48554855
isset = 0;
48564856
}
48574857
} else {
4858-
HashTable *target_symbol_table;
48594858
zend_free_op free_op1;
48604859
zval tmp, *varname = GET_OP1_ZVAL_PTR(BP_VAR_IS);
48614860

@@ -4886,8 +4885,9 @@ ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMP|VAR|CV, UNUSED|CONST|VAR)
48864885
isset = 0;
48874886
}
48884887
} else {
4889-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
4890-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
4888+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
4889+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
4890+
if (!value || Z_ISUNDEF_P(value)) {
48914891
isset = 0;
48924892
}
48934893
}

Zend/zend_vm_execute.h

+36-36
Original file line numberDiff line numberDiff line change
@@ -4586,7 +4586,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_O
45864586
isset = 0;
45874587
}
45884588
} else {
4589-
HashTable *target_symbol_table;
45904589

45914590
zval tmp, *varname = opline->op1.zv;
45924591

@@ -4617,8 +4616,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_O
46174616
isset = 0;
46184617
}
46194618
} else {
4620-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
4621-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
4619+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
4620+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
4621+
if (!value || Z_ISUNDEF_P(value)) {
46224622
isset = 0;
46234623
}
46244624
}
@@ -7010,7 +7010,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPC
70107010
isset = 0;
70117011
}
70127012
} else {
7013-
HashTable *target_symbol_table;
70147013

70157014
zval tmp, *varname = opline->op1.zv;
70167015

@@ -7041,8 +7040,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPC
70417040
isset = 0;
70427041
}
70437042
} else {
7044-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
7045-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
7043+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
7044+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
7045+
if (!value || Z_ISUNDEF_P(value)) {
70467046
isset = 0;
70477047
}
70487048
}
@@ -7886,7 +7886,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_
78867886
isset = 0;
78877887
}
78887888
} else {
7889-
HashTable *target_symbol_table;
78907889

78917890
zval tmp, *varname = opline->op1.zv;
78927891

@@ -7917,8 +7916,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_
79177916
isset = 0;
79187917
}
79197918
} else {
7920-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
7921-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
7919+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
7920+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
7921+
if (!value || Z_ISUNDEF_P(value)) {
79227922
isset = 0;
79237923
}
79247924
}
@@ -11304,7 +11304,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPC
1130411304
isset = 0;
1130511305
}
1130611306
} else {
11307-
HashTable *target_symbol_table;
1130811307
zend_free_op free_op1;
1130911308
zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1131011309

@@ -11335,8 +11334,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPC
1133511334
isset = 0;
1133611335
}
1133711336
} else {
11338-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
11339-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
11337+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
11338+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
11339+
if (!value || Z_ISUNDEF_P(value)) {
1134011340
isset = 0;
1134111341
}
1134211342
}
@@ -13639,7 +13639,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCOD
1363913639
isset = 0;
1364013640
}
1364113641
} else {
13642-
HashTable *target_symbol_table;
1364313642
zend_free_op free_op1;
1364413643
zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1364513644

@@ -13670,8 +13669,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCOD
1367013669
isset = 0;
1367113670
}
1367213671
} else {
13673-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
13674-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
13672+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
13673+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
13674+
if (!value || Z_ISUNDEF_P(value)) {
1367513675
isset = 0;
1367613676
}
1367713677
}
@@ -14390,7 +14390,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OP
1439014390
isset = 0;
1439114391
}
1439214392
} else {
14393-
HashTable *target_symbol_table;
1439414393
zend_free_op free_op1;
1439514394
zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1439614395

@@ -14421,8 +14420,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OP
1442114420
isset = 0;
1442214421
}
1442314422
} else {
14424-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
14425-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
14423+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
14424+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
14425+
if (!value || Z_ISUNDEF_P(value)) {
1442614426
isset = 0;
1442714427
}
1442814428
}
@@ -19348,7 +19348,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPC
1934819348
isset = 0;
1934919349
}
1935019350
} else {
19351-
HashTable *target_symbol_table;
1935219351
zend_free_op free_op1;
1935319352
zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1935419353

@@ -19379,8 +19378,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPC
1937919378
isset = 0;
1938019379
}
1938119380
} else {
19382-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
19383-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
19381+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
19382+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
19383+
if (!value || Z_ISUNDEF_P(value)) {
1938419384
isset = 0;
1938519385
}
1938619386
}
@@ -23737,7 +23737,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
2373723737
isset = 0;
2373823738
}
2373923739
} else {
23740-
HashTable *target_symbol_table;
2374123740
zend_free_op free_op1;
2374223741
zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
2374323742

@@ -23768,8 +23767,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
2376823767
isset = 0;
2376923768
}
2377023769
} else {
23771-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
23772-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
23770+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
23771+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
23772+
if (!value || Z_ISUNDEF_P(value)) {
2377323773
isset = 0;
2377423774
}
2377523775
}
@@ -25077,7 +25077,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OP
2507725077
isset = 0;
2507825078
}
2507925079
} else {
25080-
HashTable *target_symbol_table;
2508125080
zend_free_op free_op1;
2508225081
zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
2508325082

@@ -25108,8 +25107,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OP
2510825107
isset = 0;
2510925108
}
2511025109
} else {
25111-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
25112-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
25110+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
25111+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
25112+
if (!value || Z_ISUNDEF_P(value)) {
2511325113
isset = 0;
2511425114
}
2511525115
}
@@ -36517,7 +36517,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCO
3651736517
isset = 0;
3651836518
}
3651936519
} else {
36520-
HashTable *target_symbol_table;
3652136520

3652236521
zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
3652336522

@@ -36548,8 +36547,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCO
3654836547
isset = 0;
3654936548
}
3655036549
} else {
36551-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
36552-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
36550+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
36551+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
36552+
if (!value || Z_ISUNDEF_P(value)) {
3655336553
isset = 0;
3655436554
}
3655536555
}
@@ -40704,7 +40704,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE
4070440704
isset = 0;
4070540705
}
4070640706
} else {
40707-
HashTable *target_symbol_table;
4070840707

4070940708
zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
4071040709

@@ -40735,8 +40734,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE
4073540734
isset = 0;
4073640735
}
4073740736
} else {
40738-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
40739-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
40737+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
40738+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
40739+
if (!value || Z_ISUNDEF_P(value)) {
4074040740
isset = 0;
4074140741
}
4074240742
}
@@ -41917,7 +41917,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPC
4191741917
isset = 0;
4191841918
}
4191941919
} else {
41920-
HashTable *target_symbol_table;
4192141920

4192241921
zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
4192341922

@@ -41948,8 +41947,9 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPC
4194841947
isset = 0;
4194941948
}
4195041949
} else {
41951-
target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
41952-
if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
41950+
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
41951+
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
41952+
if (!value || Z_ISUNDEF_P(value)) {
4195341953
isset = 0;
4195441954
}
4195541955
}

0 commit comments

Comments
 (0)