Skip to content

Commit 7d80ab2

Browse files
committed
Addtional fixes of #70918
1 parent ae19628 commit 7d80ab2

File tree

3 files changed

+237
-0
lines changed

3 files changed

+237
-0
lines changed

Zend/tests/bug70918.phpt

+21
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,29 @@ try {
1919
} catch (Error $e) {
2020
var_dump($e->getMessage());
2121
}
22+
23+
try {
24+
new static;
25+
} catch (Error $e) {
26+
var_dump($e->getMessage());
27+
}
28+
29+
try {
30+
static::x();
31+
} catch (Error $e) {
32+
var_dump($e->getMessage());
33+
}
34+
35+
try {
36+
static::$i;
37+
} catch (Error $e) {
38+
var_dump($e->getMessage());
39+
}
2240
?>
2341
--EXPECT--
2442
string(52) "Cannot access static:: when no class scope is active"
2543
string(52) "Cannot access parent:: when no class scope is active"
2644
string(50) "Cannot access self:: when no class scope is active"
45+
string(52) "Cannot access static:: when no class scope is active"
46+
string(52) "Cannot access static:: when no class scope is active"
47+
string(52) "Cannot access static:: when no class scope is active"

Zend/zend_vm_def.h

+24
Original file line numberDiff line numberDiff line change
@@ -1650,6 +1650,10 @@ ZEND_VM_HELPER_EX(zend_fetch_static_prop_helper, CONST|TMPVAR|CV, UNUSED|CONST|V
16501650
} else {
16511651
if (OP2_TYPE == IS_UNUSED) {
16521652
ce = zend_fetch_class(NULL, opline->op2.num);
1653+
if (UNEXPECTED(ce == NULL)) {
1654+
ZEND_ASSERT(EG(exception));
1655+
HANDLE_EXCEPTION();
1656+
}
16531657
} else {
16541658
ce = Z_CE_P(EX_VAR(opline->op2.var));
16551659
}
@@ -3111,6 +3115,10 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CONST|VAR, CONST|TMPVA
31113115
}
31123116
} else if (OP1_TYPE == IS_UNUSED) {
31133117
ce = zend_fetch_class(NULL, opline->op1.num);
3118+
if (UNEXPECTED(ce == NULL)) {
3119+
ZEND_ASSERT(EG(exception));
3120+
HANDLE_EXCEPTION();
3121+
}
31143122
} else {
31153123
ce = Z_CE_P(EX_VAR(opline->op1.var));
31163124
}
@@ -4988,6 +4996,10 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CONST|VAR, JMP_ADDR, NUM)
49884996
}
49894997
} else if (OP1_TYPE == IS_UNUSED) {
49904998
ce = zend_fetch_class(NULL, opline->op1.num);
4999+
if (UNEXPECTED(ce == NULL)) {
5000+
ZEND_ASSERT(EG(exception));
5001+
HANDLE_EXCEPTION();
5002+
}
49915003
} else {
49925004
ce = Z_CE_P(EX_VAR(opline->op1.var));
49935005
}
@@ -5681,6 +5693,10 @@ ZEND_VM_HANDLER(179, ZEND_UNSET_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CONST|VAR)
56815693
}
56825694
} else if (OP2_TYPE == IS_UNUSED) {
56835695
ce = zend_fetch_class(NULL, opline->op2.num);
5696+
if (UNEXPECTED(ce == NULL)) {
5697+
ZEND_ASSERT(EG(exception));
5698+
HANDLE_EXCEPTION();
5699+
}
56845700
} else {
56855701
ce = Z_CE_P(EX_VAR(opline->op2.var));
56865702
}
@@ -6570,6 +6586,10 @@ ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CON
65706586
} else {
65716587
if (OP2_TYPE == IS_UNUSED) {
65726588
ce = zend_fetch_class(NULL, opline->op2.num);
6589+
if (UNEXPECTED(ce == NULL)) {
6590+
ZEND_ASSERT(EG(exception));
6591+
HANDLE_EXCEPTION();
6592+
}
65736593
} else {
65746594
ce = Z_CE_P(EX_VAR(opline->op2.var));
65756595
}
@@ -7137,6 +7157,10 @@ ZEND_VM_C_LABEL(try_instanceof):
71377157
}
71387158
} else if (OP2_TYPE == IS_UNUSED) {
71397159
ce = zend_fetch_class(NULL, opline->op2.num);
7160+
if (UNEXPECTED(ce == NULL)) {
7161+
ZEND_ASSERT(EG(exception));
7162+
HANDLE_EXCEPTION();
7163+
}
71407164
} else {
71417165
ce = Z_CE_P(EX_VAR(opline->op2.var));
71427166
}

0 commit comments

Comments
 (0)