mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58: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 {
|
} else {
|
||||||
if (OP1_TYPE == IS_UNUSED) {
|
if (OP1_TYPE == IS_UNUSED) {
|
||||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||||
|
if (UNEXPECTED(ce == NULL)) {
|
||||||
|
ZEND_ASSERT(EG(exception));
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
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 {
|
} else {
|
||||||
if (IS_CONST == IS_UNUSED) {
|
if (IS_CONST == IS_UNUSED) {
|
||||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||||
|
if (UNEXPECTED(ce == NULL)) {
|
||||||
|
ZEND_ASSERT(EG(exception));
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
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 {
|
} else {
|
||||||
if (IS_VAR == IS_UNUSED) {
|
if (IS_VAR == IS_UNUSED) {
|
||||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||||
|
if (UNEXPECTED(ce == NULL)) {
|
||||||
|
ZEND_ASSERT(EG(exception));
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
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 {
|
} else {
|
||||||
if (IS_UNUSED == IS_UNUSED) {
|
if (IS_UNUSED == IS_UNUSED) {
|
||||||
ce = zend_fetch_class(NULL, opline->op1.num);
|
ce = zend_fetch_class(NULL, opline->op1.num);
|
||||||
|
if (UNEXPECTED(ce == NULL)) {
|
||||||
|
ZEND_ASSERT(EG(exception));
|
||||||
|
HANDLE_EXCEPTION();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
ce = Z_CE_P(EX_VAR(opline->op1.var));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue