From 04e3d82b5597630cc0a4ccdbafb75a4750c6506e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 10 Dec 2015 22:22:49 +0100 Subject: [PATCH] Make duplicate class constant error for internal class And drop two duplicate constant declarations from intl. These were leaking previously. --- Zend/zend_API.c | 11 ++++++++--- Zend/zend_compile.c | 5 +---- ext/intl/calendar/calendar_class.cpp | 2 -- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Zend/zend_API.c b/Zend/zend_API.c index fc49f3369e..8003fd79aa 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3749,7 +3749,7 @@ ZEND_API int zend_declare_class_constant_ex(zend_class_entry *ce, zend_string *n } if (zend_string_equals_literal_ci(name, "class")) { - zend_error((ce->type == ZEND_INTERNAL_CLASS) ? E_CORE_ERROR : E_COMPILE_ERROR, + zend_error_noreturn(ce->type == ZEND_INTERNAL_CLASS ? E_CORE_ERROR : E_COMPILE_ERROR, "A class constant must not be called 'class'; it is reserved for class name fetching"); } @@ -3765,8 +3765,13 @@ ZEND_API int zend_declare_class_constant_ex(zend_class_entry *ce, zend_string *n if (Z_CONSTANT_P(value)) { ce->ce_flags &= ~ZEND_ACC_CONSTANTS_UPDATED; } - return zend_hash_add_ptr(&ce->constants_table, name, c) ? - SUCCESS : FAILURE; + + if (!zend_hash_add_ptr(&ce->constants_table, name, c)) { + zend_error_noreturn(ce->type == ZEND_INTERNAL_CLASS ? E_CORE_ERROR : E_COMPILE_ERROR, + "Cannot redefine class constant %s::%s", ZSTR_VAL(ce->name), ZSTR_VAL(name)); + } + + return SUCCESS; } /* }}} */ diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 2e50271a7f..329545138d 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5231,10 +5231,7 @@ void zend_compile_class_const_decl(zend_ast *ast) /* {{{ */ zend_const_expr_to_zval(&value_zv, value_ast); name = zend_new_interned_string_safe(name); - if (zend_declare_class_constant_ex(ce, name, &value_zv, ast->attr, doc_comment) != SUCCESS) { - zend_error_noreturn(E_COMPILE_ERROR, "Cannot redefine class constant %s::%s", - ZSTR_VAL(ce->name), ZSTR_VAL(name)); - } + zend_declare_class_constant_ex(ce, name, &value_zv, ast->attr, doc_comment); } } /* }}} */ diff --git a/ext/intl/calendar/calendar_class.cpp b/ext/intl/calendar/calendar_class.cpp index 6b6feef8d9..1f3a68b802 100644 --- a/ext/intl/calendar/calendar_class.cpp +++ b/ext/intl/calendar/calendar_class.cpp @@ -505,8 +505,6 @@ void calendar_register_IntlCalendar_class(void) CALENDAR_DECL_LONG_CONST("FIELD_AM_PM", UCAL_AM_PM); CALENDAR_DECL_LONG_CONST("FIELD_HOUR", UCAL_HOUR); CALENDAR_DECL_LONG_CONST("FIELD_HOUR_OF_DAY", UCAL_HOUR_OF_DAY); - CALENDAR_DECL_LONG_CONST("FIELD_HOUR", UCAL_HOUR); - CALENDAR_DECL_LONG_CONST("FIELD_HOUR_OF_DAY", UCAL_HOUR_OF_DAY); CALENDAR_DECL_LONG_CONST("FIELD_MINUTE", UCAL_MINUTE); CALENDAR_DECL_LONG_CONST("FIELD_SECOND", UCAL_SECOND); CALENDAR_DECL_LONG_CONST("FIELD_MILLISECOND", UCAL_MILLISECOND); -- 2.40.0