[php-src] master: 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-25T18:18:29-04:00
Commit: https://github.com/php/php-src/commit/38ffb6365b4843f4042687b2ab7b36d9bde87c95
Raw diff: https://github.com/php/php-src/commit/38ffb6365b4843f4042687b2ab7b36d9bde87c95.diff
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4:
Close the keyword UEnumeration on Locale::getKeywords failure
Changed paths:
A ext/intl/tests/locale_get_keywords_failure.phpt
M NEWS
M ext/intl/locale/locale_methods.cpp
Diff:
diff --git a/NEWS b/NEWS
index 247fcb340ef9..0664cf4e4e31 100644
--- a/NEWS
+++ b/NEWS
@@ -30,6 +30,8 @@ PHP NEWS
. Fixed Locale::parseLocale() reading past a trailing '-' or '_'.
(iliaal, Xuyang Zhang)
. Fixed grapheme_str_split() treating UBRK_DONE as a byte index. (iliaal)
+ . Fixed a leak in Locale::getKeywords() when a keyword value cannot be
+ read. (iliaal)
- Opcache:
. Fixed opcache.protect_memory race under ZTS. (realFlowControl)
diff --git a/ext/intl/locale/locale_methods.cpp b/ext/intl/locale/locale_methods.cpp
index 1bcdf9ded6b3..0ab3f6e4eceb 100644
--- a/ext/intl/locale/locale_methods.cpp
+++ b/ext/intl/locale/locale_methods.cpp
@@ -774,6 +774,7 @@ U_CFUNC PHP_FUNCTION( locale_get_keywords )
zend_string_efree( kw_value_str );
}
zend_array_destroy(Z_ARR_P(return_value));
+ uenum_close( e );
RETURN_FALSE;
}
diff --git a/ext/intl/tests/locale_get_keywords_failure.phpt b/ext/intl/tests/locale_get_keywords_failure.phpt
new file mode 100644
index 000000000000..823da63ca541
--- /dev/null
+++ b/ext/intl/tests/locale_get_keywords_failure.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Locale::getKeywords() closes the keyword enumeration on failure
+--EXTENSIONS--
+intl
+--SKIPIF--
+<?php
+if (version_compare(INTL_ICU_VERSION, '59.1', '<')) {
+ die('skip for ICU >= 59.1');
+}
+?>
+--FILE--
+<?php
+var_dump(Locale::getKeywords('en@foo=bar!'));
+var_dump(intl_get_error_code() === U_ILLEGAL_ARGUMENT_ERROR);
+?>
+--EXPECT--
+bool(false)
+bool(true)