diff options
author | Thomas Punt <tpunt@hotmail.co.uk> | 2017-08-23 23:35:18 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2017-08-25 22:02:19 +0200 |
commit | be9edd83c2b3119018611e178da0ee55f7b71c28 (patch) | |
tree | 14f0246e131774d6314cc90f58c3ac243b6dfcdf | |
parent | 55db2c31cd4596c53e3b952e1ddfea36f23412e4 (diff) | |
download | php-git-be9edd83c2b3119018611e178da0ee55f7b71c28.tar.gz |
Fixed bug #75090
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/intl/calendar/calendar_class.cpp | 22 | ||||
-rw-r--r-- | ext/intl/tests/bug75090.phpt | 22 |
3 files changed, 37 insertions, 11 deletions
@@ -8,6 +8,10 @@ PHP NEWS - CURL: . Fixed bug #75093 (OpenSSL support not detected). (Remi) +- Intl: + . Fixed bug #75090 (IntlGregorianCalendar doesn't have constants from parent + class). (tpunt) + - PDO_OCI: . Fixed bug #74631 (PDO_PCO with PHP-FPM: OCI environment initialized before PHP-FPM sets it up). (Ingmar Runge) diff --git a/ext/intl/calendar/calendar_class.cpp b/ext/intl/calendar/calendar_class.cpp index 4414a7a092..94a2d5a199 100644 --- a/ext/intl/calendar/calendar_class.cpp +++ b/ext/intl/calendar/calendar_class.cpp @@ -477,17 +477,6 @@ void calendar_register_IntlCalendar_class(void) Calendar_handlers.dtor_obj = Calendar_objects_dtor; Calendar_handlers.free_obj = Calendar_objects_free; - /* Create and register 'IntlGregorianCalendar' class. */ - INIT_CLASS_ENTRY(ce, "IntlGregorianCalendar", GregorianCalendar_class_functions); - GregorianCalendar_ce_ptr = zend_register_internal_class_ex(&ce, - Calendar_ce_ptr); - if (!GregorianCalendar_ce_ptr) { - //can't happen know without bigger problems before - php_error_docref0(NULL, E_ERROR, - "IntlGregorianCalendar: class registration has failed."); - return; - } - /* Declare 'IntlCalendar' class constants */ #define CALENDAR_DECL_LONG_CONST(name, val) \ zend_declare_class_constant_long(Calendar_ce_ptr, name, sizeof(name) - 1, \ @@ -541,5 +530,16 @@ void calendar_register_IntlCalendar_class(void) CALENDAR_DECL_LONG_CONST("WALLTIME_LAST", UCAL_WALLTIME_LAST); CALENDAR_DECL_LONG_CONST("WALLTIME_NEXT_VALID", UCAL_WALLTIME_NEXT_VALID); #endif + + /* Create and register 'IntlGregorianCalendar' class. */ + INIT_CLASS_ENTRY(ce, "IntlGregorianCalendar", GregorianCalendar_class_functions); + GregorianCalendar_ce_ptr = zend_register_internal_class_ex(&ce, + Calendar_ce_ptr); + if (!GregorianCalendar_ce_ptr) { + //can't happen know without bigger problems before + php_error_docref0(NULL, E_ERROR, + "IntlGregorianCalendar: class registration has failed."); + return; + } } /* }}} */ diff --git a/ext/intl/tests/bug75090.phpt b/ext/intl/tests/bug75090.phpt new file mode 100644 index 0000000000..ff5e0bd584 --- /dev/null +++ b/ext/intl/tests/bug75090.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #75090 Constants of parent IntlCalendar class not inherited +--SKIPIF-- +<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?> +--FILE-- +<?php +class Foo extends IntlCalendar {} + +$fooRef = new ReflectionClass(Foo::class); +$intlGregorianCalendarRef = new ReflectionClass(IntlGregorianCalendar::class); +$intlCalendarRef = new ReflectionClass(IntlCalendar::class); + +var_dump( + count($fooRef->getConstants()) === count($intlCalendarRef->getConstants()), + count($intlGregorianCalendarRef->getConstants()) === count($intlCalendarRef->getConstants()) +); +?> +===DONE=== +--EXPECT-- +bool(true) +bool(true) +===DONE=== |