Commit 42704147d6d for php
commit 42704147d6d05a9acdd0f076aa9be61516cdd66c
Author: Ilia Alshanetsky <ilia@ilia.ws>
Date: Mon Oct 5 07:09:26 2026 -0400
Fix Calendar::createInstance double-free of the adopted TimeZone (#23320)
ICU 57+ Calendar::createInstance wraps the TimeZone in a LocalPointer
and deletes it when the calendar cannot be created. PHP deleted the
same pointer again on that failure. Drop the extra delete in
createInstance and fromDateTime.
diff --git a/NEWS b/NEWS
index 2595e055ddf..7d3d54540a3 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,9 @@ PHP NEWS
unconstructed Collator. (Ilia Alshanetsky)
. Added optional $availableLocales argument to Locale::acceptFromHttp()
(GH-24074). (David Carlier)
+ . Fixed a double-free when Calendar::createInstance() or
+ IntlCalendar::fromDateTime() fails after adopting a TimeZone.
+ (Ilia Alshanetsky)
- Lexbor:
. Merge patches lexbor/lexbor@8a14bc0 and lexbor/lexbor@f67ce4b, fixing a
diff --git a/ext/intl/calendar/calendar_methods.cpp b/ext/intl/calendar/calendar_methods.cpp
index 0c6e68a65e2..f4c9cb36cde 100644
--- a/ext/intl/calendar/calendar_methods.cpp
+++ b/ext/intl/calendar/calendar_methods.cpp
@@ -96,7 +96,6 @@ PHP_INTL_FUNCTION_WITH_ERROR_RESET(intlcal_create_instance)
Calendar *cal = Calendar::createInstance(timeZone,
Locale::createFromName(locale_str), status);
if (UNEXPECTED(cal == NULL)) {
- delete timeZone;
intl_error_set(NULL, status, "Error creating ICU Calendar object");
RETURN_NULL();
}
@@ -1073,7 +1072,6 @@ PHP_INTL_FUNCTION_WITH_ERROR_RESET(intlcal_from_date_time)
cal = Calendar::createInstance(timeZone,
Locale::createFromName(locale_str), status);
if (UNEXPECTED(cal == NULL)) {
- delete timeZone;
intl_error_set(NULL, status,
"error creating ICU Calendar object");
goto error;