From: Derick Rethans Date: Mon, 17 Oct 2005 07:03:33 +0000 (+0000) Subject: - Make sure that typehints for classes can only accept "= NULL" as default X-Git-Tag: RELEASE_0_9_1~99 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=086875b1075b5f4c8c0cf9b578a2a2b0688c6aec;p=php - Make sure that typehints for classes can only accept "= NULL" as default value. --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index cae7f11c13..fdda529d5a 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1332,12 +1332,20 @@ void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initia if (class_type->u.constant.type == IS_STRING || class_type->u.constant.type == IS_UNICODE) { cur_arg_info->class_name = Z_UNIVAL(class_type->u.constant); cur_arg_info->class_name_len = Z_UNILEN(class_type->u.constant); + + /* FIXME: make this work for unicode=on too */ + if (op == ZEND_RECV_INIT) { + if (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL"))) { + cur_arg_info->allow_null = 1; + } else { + zend_error(E_COMPILE_ERROR, "Default value for parameters with a class type hint can only be NULL"); + } + } } else { cur_arg_info->array_type_hint = 1; cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0; } - cur_arg_info->allow_null = (op == ZEND_RECV_INIT && (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL")))) ? 1 : 0; } else { cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0; diff --git a/tests/lang/type_hints_002.phpt b/tests/lang/type_hints_002.phpt new file mode 100644 index 0000000000..b21240a792 --- /dev/null +++ b/tests/lang/type_hints_002.phpt @@ -0,0 +1,28 @@ +--TEST-- +ZE2 type hinting +--SKIPIF-- + +--FILE-- +f(new P); +$o->f(); +$o->f(NULL); +?> +--EXPECT-- +object(P)#2 (0) { +} +- +NULL +- +NULL +- + diff --git a/tests/lang/type_hints_003.phpt b/tests/lang/type_hints_003.phpt new file mode 100644 index 0000000000..9f1d2ba07d --- /dev/null +++ b/tests/lang/type_hints_003.phpt @@ -0,0 +1,14 @@ +--TEST-- +ZE2 type hinting +--SKIPIF-- + +--FILE-- + +--EXPECTF-- + +Fatal error: Default value for parameters with a class type hint can only be NULL in %stest.php on line 3