diff --git a/ext/intl/converter/converter.c b/ext/intl/converter/converter.c index db2b73e2cb6..858f1ee3b50 100644 --- a/ext/intl/converter/converter.c +++ b/ext/intl/converter/converter.c @@ -384,20 +384,23 @@ static bool php_converter_set_encoding(php_converter_object *objval, if (objval) { THROW_UFAILURE(objval, "ucnv_open", error); } else { - php_error_docref(NULL, E_WARNING, "Error setting encoding: %d - %s", (int)error, u_errorName(error)); + char *msg; + spprintf(&msg, 0, "Error setting encoding: %d - %s", (int)error, u_errorName(error)); + intl_error_set(NULL, error, msg, 1); + efree(msg); } - return 0; + return false; } if (objval && !php_converter_set_callbacks(objval, cnv)) { - return 0; + return false; } if (*pcnv) { ucnv_close(*pcnv); } *pcnv = cnv; - return 1; + return true; } /* }}} */ diff --git a/ext/intl/tests/gh17469.phpt b/ext/intl/tests/gh17469.phpt new file mode 100644 index 00000000000..a0c5d719817 --- /dev/null +++ b/ext/intl/tests/gh17469.phpt @@ -0,0 +1,34 @@ +--TEST-- +GH-17469: UConverter::transcode() raises always E_WARNING regardless of INI settings +--SKIPIF-- + +--FILE-- +getMessage(), PHP_EOL; +} +try { + UConverter::transcode("\x0a", 'UTF-16BE', 'da!'); +} catch (IntlException $e) { + echo $e->getMessage(), PHP_EOL; +} +?> +--EXPECTF-- + +Warning: UConverter::transcode(): Error setting encoding: 4 - U_FILE_ACCESS_ERROR in %s on line %d + +Warning: UConverter::transcode(): Error setting encoding: 4 - U_FILE_ACCESS_ERROR in %s on line 5 +Error setting encoding: 4 - U_FILE_ACCESS_ERROR +Error setting encoding: 4 - U_FILE_ACCESS_ERROR