mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
Fixed Bug #70918 (Segfault using static outside of class scope)
This commit is contained in:
parent
90027dd7f6
commit
06fe956460
3 changed files with 42 additions and 0 deletions
26
Zend/tests/bug70918.phpt
Normal file
26
Zend/tests/bug70918.phpt
Normal file
|
@ -0,0 +1,26 @@
|
|||
--TEST--
|
||||
Bug #70918 (Segfault using static outside of class scope)
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
static::x;
|
||||
} catch (Error $e) {
|
||||
var_dump($e->getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
parent::x;
|
||||
} catch (Error $e) {
|
||||
var_dump($e->getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
self::x;
|
||||
} catch (Error $e) {
|
||||
var_dump($e->getMessage());
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
string(52) "Cannot access static:: when no class scope is active"
|
||||
string(52) "Cannot access parent:: when no class scope is active"
|
||||
string(50) "Cannot access self:: when no class scope is active"
|
|
@ -5180,6 +5180,10 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED, CONST)
|
|||
} else {
|
||||
if (OP1_TYPE == IS_UNUSED) {
|
||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||
if (UNEXPECTED(ce == NULL)) {
|
||||
ZEND_ASSERT(EG(exception));
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
} else {
|
||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
||||
}
|
||||
|
|
|
@ -5841,6 +5841,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONS
|
|||
} else {
|
||||
if (IS_CONST == IS_UNUSED) {
|
||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||
if (UNEXPECTED(ce == NULL)) {
|
||||
ZEND_ASSERT(EG(exception));
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
} else {
|
||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
||||
}
|
||||
|
@ -17507,6 +17511,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_
|
|||
} else {
|
||||
if (IS_VAR == IS_UNUSED) {
|
||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||
if (UNEXPECTED(ce == NULL)) {
|
||||
ZEND_ASSERT(EG(exception));
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
} else {
|
||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
||||
}
|
||||
|
@ -23906,6 +23914,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
|
|||
} else {
|
||||
if (IS_UNUSED == IS_UNUSED) {
|
||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||
if (UNEXPECTED(ce == NULL)) {
|
||||
ZEND_ASSERT(EG(exception));
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
} else {
|
||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue