diff --git a/ext/intl/uchar/tests/enumCharNames_callback_exception.phpt b/ext/intl/uchar/tests/enumCharNames_callback_exception.phpt new file mode 100644 index 000000000000..2ebac7aac92c --- /dev/null +++ b/ext/intl/uchar/tests/enumCharNames_callback_exception.phpt @@ -0,0 +1,20 @@ +--TEST-- +IntlChar::enumCharNames() propagates callback exceptions and remains usable +--EXTENSIONS-- +intl +--FILE-- +getMessage(), "\n"; +} +var_dump(IntlChar::enumCharNames(65, 68, static fn() => false)); +?> +--EXPECT-- +65 +Stop enumeration +bool(true) diff --git a/ext/intl/uchar/uchar.cpp b/ext/intl/uchar/uchar.cpp index 1319ec679085..b2df5b9a05a8 100644 --- a/ext/intl/uchar/uchar.cpp +++ b/ext/intl/uchar/uchar.cpp @@ -312,7 +312,7 @@ static UBool enumCharNames_callback(enumCharNames_data *context, } zval_ptr_dtor(&retval); zval_ptr_dtor_str(&args[2]); - return 1; + return !EG(exception); } IC_METHOD(enumCharNames) { UChar32 start, limit;