[php-src] PHP-8.5: Merge branch 'PHP-8.4' into PHP-8.5
Ilia Alshanetsky <[email protected]>
| Newsgroups | gmane.comp.php.cvs.general |
|---|---|
| Message-ID | <[email protected]> |
Author: Ilia Alshanetsky (iliaal)
Date: 2026-08-30T11:48:17-04:00
Commit: https://github.com/php/php-src/commit/a7ee4de855de4788a269d8eaa7922cd41ac7bab6
Raw diff: https://github.com/php/php-src/commit/a7ee4de855de4788a269d8eaa7922cd41ac7bab6.diff
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
[intl] Fix leak of time zone wrapper in Calendar debug info
Changed paths:
A ext/intl/tests/calendar_get_debug_info_tz_leak.phpt
M NEWS
M ext/intl/calendar/calendar_class.cpp
Diff:
diff --git a/NEWS b/NEWS
index 220aa49869c5..ccb18766e2ae 100644
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,7 @@ PHP NEWS
. Fixed bug GH-19320 (FPM UID and GID overflow). (Pratik Bhujel)
- Intl:
+ . Fixed a memory leak when dumping IntlCalendar instances. (Ilia Alshanetsky)
. Fixed a memory leak when iterating IntlBreakIterator::getPartsIterator()
results. (iliaal)
. Fixed a double-free when IntlGregorianCalendar construction fails after
diff --git a/ext/intl/calendar/calendar_class.cpp b/ext/intl/calendar/calendar_class.cpp
index 326b5475b73a..875e25de76a0 100644
--- a/ext/intl/calendar/calendar_class.cpp
+++ b/ext/intl/calendar/calendar_class.cpp
@@ -171,6 +171,8 @@ static HashTable *Calendar_get_debug_info(zend_object *object, int *is_temp)
FREE_HASHTABLE(debug_info_tz);
zend_hash_str_update(debug_info, "timeZone", sizeof("timeZone") - 1, &ztz_debug);
+
+ zval_ptr_dtor(&ztz);
}
{
diff --git a/ext/intl/tests/calendar_get_debug_info_tz_leak.phpt b/ext/intl/tests/calendar_get_debug_info_tz_leak.phpt
new file mode 100644
index 000000000000..32b9da4368a9
--- /dev/null
+++ b/ext/intl/tests/calendar_get_debug_info_tz_leak.phpt
@@ -0,0 +1,26 @@
+--TEST--
+IntlCalendar get_debug_info() must not leak the time zone wrapper object
+--EXTENSIONS--
+intl
+--FILE--
+<?php
+$cal = IntlCalendar::createInstance('UTC');
+ob_start();
+var_dump($cal);
+ob_end_clean();
+
+$o = new stdClass;
+$before = spl_object_id($o);
+unset($o);
+for ($i = 0; $i < 10; $i++) {
+ ob_start();
+ var_dump($cal);
+ ob_end_clean();
+}
+$o = new stdClass;
+$after = spl_object_id($o);
+
+var_dump($after - $before);
+?>
+--EXPECT--
+int(0)