mirror of
https://github.com/php/php-src.git
synced 2025-01-14 06:54:52 +08:00
Merge branch 'PHP-7.0'
This commit is contained in:
commit
2dc9aa9bea
30
Zend/tests/bug71622.phpt
Normal file
30
Zend/tests/bug71622.phpt
Normal file
@ -0,0 +1,30 @@
|
||||
--TEST--
|
||||
Bug #71622 (Strings used in pass-as-reference cannot be used to invoke C::$callable())
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function getMethodName(&$methodName) {
|
||||
$methodName = Abc::METHOD_NAME;
|
||||
}
|
||||
|
||||
class Abc {
|
||||
const METHOD_NAME = "goal";
|
||||
|
||||
private static function goal() {
|
||||
echo "success\n";
|
||||
}
|
||||
|
||||
public static function run() {
|
||||
$method = "foobar";
|
||||
getMethodName($method);
|
||||
var_dump(is_callable("self::$method"));
|
||||
self::$method();
|
||||
}
|
||||
}
|
||||
|
||||
Abc::run();
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
success
|
@ -3164,6 +3164,9 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
|
||||
|
||||
function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||
if (OP2_TYPE != IS_CONST) {
|
||||
if (OP2_TYPE & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
|
@ -5997,6 +5997,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
||||
|
||||
function_name = EX_CONSTANT(opline->op2);
|
||||
if (IS_CONST != IS_CONST) {
|
||||
if (IS_CONST & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
@ -7885,6 +7888,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
||||
|
||||
function_name = NULL;
|
||||
if (IS_UNUSED != IS_CONST) {
|
||||
if (IS_UNUSED & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
@ -9685,6 +9691,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
||||
|
||||
function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
|
||||
if (IS_CV != IS_CONST) {
|
||||
if (IS_CV & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
@ -11479,6 +11488,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
||||
|
||||
function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
|
||||
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
|
||||
if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
@ -18771,6 +18783,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
||||
|
||||
function_name = EX_CONSTANT(opline->op2);
|
||||
if (IS_CONST != IS_CONST) {
|
||||
if (IS_CONST & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
@ -20651,6 +20666,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
||||
|
||||
function_name = NULL;
|
||||
if (IS_UNUSED != IS_CONST) {
|
||||
if (IS_UNUSED & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
@ -23161,6 +23179,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
||||
|
||||
function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
|
||||
if (IS_CV != IS_CONST) {
|
||||
if (IS_CV & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
@ -25588,6 +25609,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
||||
|
||||
function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
|
||||
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
|
||||
if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) {
|
||||
ZVAL_DEREF(function_name);
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
|
||||
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
|
||||
|
Loading…
Reference in New Issue
Block a user