summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Punt <tpunt@hotmail.co.uk>2017-08-23 23:35:18 +0100
committerNikita Popov <nikita.ppv@gmail.com>2017-08-25 22:02:19 +0200
commitbe9edd83c2b3119018611e178da0ee55f7b71c28 (patch)
tree14f0246e131774d6314cc90f58c3ac243b6dfcdf
parent55db2c31cd4596c53e3b952e1ddfea36f23412e4 (diff)
downloadphp-git-be9edd83c2b3119018611e178da0ee55f7b71c28.tar.gz
Fixed bug #75090
-rw-r--r--NEWS4
-rw-r--r--ext/intl/calendar/calendar_class.cpp22
-rw-r--r--ext/intl/tests/bug75090.phpt22
3 files changed, 37 insertions, 11 deletions
diff --git a/NEWS b/NEWS
index f0cdd2b8b1..edd4e29e54 100644
--- a/NEWS
+++ b/NEWS
@@ -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===