[PHP-CVS] [php-src] master: Merge branch 'PHP-8.5'

[email protected] (Weilin Du) Sat, 1 Aug 2026 16:20:01 +0000
Newsgroups php.cvs
Message-ID <[email protected]>
Author: Weilin Du (LamentXU123)
Date: 2026-08-02T00:17:25+08:00

Commit: https://github.com/php/php-src/commit/198bf7f0be486e27bdb1cb81986a4498e33a09d0
Raw diff: https://github.com/php/php-src/commit/198bf7f0be486e27bdb1cb81986a4498e33a09d0.diff

Merge branch 'PHP-8.5'

* PHP-8.5:
  ext/intl: Reset IntlListFormatter error state in constructor (#22931)

Changed paths:
  A  ext/intl/tests/listformatter/listformatter_constructor_error_reset.phpt
  M  NEWS
  M  ext/intl/listformatter/listformatter_class.cpp


Diff:

diff --git a/NEWS b/NEWS
index ad511d6a890e..0d5b6300fc7a 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,8 @@ PHP                                                                        NEWS
     collator_asort() to report UTF-8/UTF-16 conversion errors through the intl
     error handler instead of emitting a warning and continuing with an empty
     string. (Weilin Du)
+  . Fixed IntlListFormatter::__construct() leaving stale global error state
+    after successful calls. (Weilin Du)
 
 - Reflection:
   . Added ReflectionAttribute::inNamespace(),
diff --git a/ext/intl/listformatter/listformatter_class.cpp b/ext/intl/listformatter/listformatter_class.cpp
index 59c01259227d..87b5efb3f668 100644
--- a/ext/intl/listformatter/listformatter_class.cpp
+++ b/ext/intl/listformatter/listformatter_class.cpp
@@ -67,6 +67,9 @@ PHP_METHOD(IntlListFormatter, __construct)
         zend_long type = INTL_LISTFORMATTER_FALLBACK_TYPE_AND;
         zend_long width = INTL_LISTFORMATTER_FALLBACK_WIDTH_WIDE;
     #endif
+
+    intl_errors_reset(LISTFORMATTER_ERROR_P(obj));
+
     ZEND_PARSE_PARAMETERS_START(1, 3)
         Z_PARAM_STRING(locale, locale_len)
         Z_PARAM_OPTIONAL
diff --git a/ext/intl/tests/listformatter/listformatter_constructor_error_reset.phpt b/ext/intl/tests/listformatter/listformatter_constructor_error_reset.phpt
new file mode 100644
index 000000000000..3360bb848fa6
--- /dev/null
+++ b/ext/intl/tests/listformatter/listformatter_constructor_error_reset.phpt
@@ -0,0 +1,23 @@
+--TEST--
+IntlListFormatter::__construct() resets stale errors
+--EXTENSIONS--
+intl
+--FILE--
+<?php
+$formatter = new IntlListFormatter('en_US');
+var_dump($formatter->format(["\x80"]));
+var_dump(intl_get_error_code() === U_INVALID_CHAR_FOUND);
+
+$formatter = new IntlListFormatter('en_US');
+var_dump(intl_get_error_code());
+var_dump(intl_get_error_message());
+var_dump($formatter->getErrorCode());
+var_dump($formatter->getErrorMessage());
+?>
+--EXPECT--
+bool(false)
+bool(true)
+int(0)
+string(12) "U_ZERO_ERROR"
+int(0)
+string(12) "U_ZERO_ERROR"