From f673b558cc9a0b28ed045a727b955b08bf77ac92 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Mon, 4 Jun 2007 08:24:32 +0000 Subject: [PATCH] change E_NOTICE to E_ERROR when using a class constant from non-existent class (noticed by Jani) add tests --- Zend/tests/class_constants_001.phpt | 27 +++++++++++++++++++++++ Zend/tests/class_constants_002.phpt | 31 +++++++++++++++++++++++++++ Zend/tests/class_constants_003.phpt | 33 +++++++++++++++++++++++++++++ Zend/zend_constants.c | 3 ++- 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/class_constants_001.phpt create mode 100644 Zend/tests/class_constants_002.phpt create mode 100644 Zend/tests/class_constants_003.phpt diff --git a/Zend/tests/class_constants_001.phpt b/Zend/tests/class_constants_001.phpt new file mode 100644 index 0000000000..f2c3b3e548 --- /dev/null +++ b/Zend/tests/class_constants_001.phpt @@ -0,0 +1,27 @@ +--TEST-- +class constants basic tests +--FILE-- + +--EXPECTF-- +string(6) "string" +int(1) + +Fatal error: Undefined class constant 'val3' in %s on line %d +--UEXPECTF-- +unicode(6) "string" +int(1) + +Fatal error: Undefined class constant 'val3' in %s on line %d diff --git a/Zend/tests/class_constants_002.phpt b/Zend/tests/class_constants_002.phpt new file mode 100644 index 0000000000..9aad8088da --- /dev/null +++ b/Zend/tests/class_constants_002.phpt @@ -0,0 +1,31 @@ +--TEST-- +class constants as default function arguments +--FILE-- + +--EXPECTF-- +int(1) +int(5) +int(10) + +Fatal error: Class 'NoSuchClass' not found in %s on line %d diff --git a/Zend/tests/class_constants_003.phpt b/Zend/tests/class_constants_003.phpt new file mode 100644 index 0000000000..c2782ff1c9 --- /dev/null +++ b/Zend/tests/class_constants_003.phpt @@ -0,0 +1,33 @@ +--TEST-- +class constants as default function arguments and dynamically loaded classes +--FILE-- + +DATA; + +$filename = dirname(__FILE__)."/cc003.dat"; +file_put_contents($filename, $class_data); + +function foo($v = test::val) { + var_dump($v); +} + +include $filename; + +foo(); +foo(5); + +unlink($filename); + +echo "Done\n"; +?> +--EXPECTF-- +int(1) +int(5) +Done diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 1050ddb8ee..1a2ffc2e25 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -318,15 +318,16 @@ ZEND_API int zend_u_get_constant(zend_uchar type, zstr name, uint name_len, zval retval = 0; } } - efree(class_name.v); if (retval && ce) { if (zend_u_hash_find(&((*ce)->constants_table), type, constant_name, const_name_len+1, (void **) &ret_constant) != SUCCESS) { retval = 0; } } else { + zend_error(E_ERROR, "Class '%R' not found", type, class_name); retval = 0; } + efree(class_name.v); if (retval) { zval_update_constant(ret_constant, (void*)1 TSRMLS_CC); -- 2.50.1