diff --git a/ext/intl/formatter/formatter_attr.c b/ext/intl/formatter/formatter_attr.c index 99a4a3d21102a..fe50f716e81bb 100644 --- a/ext/intl/formatter/formatter_attr.c +++ b/ext/intl/formatter/formatter_attr.c @@ -332,6 +332,7 @@ PHP_FUNCTION( numfmt_set_pattern ) size_t value_len = 0; int32_t slength = 0; UChar* svalue = NULL; + UParseError spattern_error = {0}; FORMATTER_METHOD_INIT_VARS; /* Parse parameters. */ @@ -347,12 +348,17 @@ PHP_FUNCTION( numfmt_set_pattern ) intl_convert_utf8_to_utf16(&svalue, &slength, value, value_len, &INTL_DATA_ERROR_CODE(nfo)); INTL_METHOD_CHECK_STATUS( nfo, "Error converting pattern to UTF-16" ); - /* TODO: add parse error information */ - unum_applyPattern(FORMATTER_OBJECT(nfo), 0, svalue, slength, NULL, &INTL_DATA_ERROR_CODE(nfo)); + unum_applyPattern(FORMATTER_OBJECT(nfo), 0, svalue, slength, &spattern_error, &INTL_DATA_ERROR_CODE(nfo)); if (svalue) { efree(svalue); } - INTL_METHOD_CHECK_STATUS( nfo, "Error setting pattern value" ); + if (U_FAILURE(INTL_DATA_ERROR_CODE(nfo))) { + char *msg; + spprintf(&msg, 0, "Error setting pattern value at line %d, offset %d", spattern_error.line, spattern_error.offset); + intl_errors_set_custom_msg(INTL_DATA_ERROR_P(nfo), msg, 1); + efree(msg); + RETURN_FALSE; + } RETURN_TRUE; } diff --git a/ext/intl/tests/formatter_get_set_pattern2.phpt b/ext/intl/tests/formatter_get_set_pattern2.phpt index 7b454ae965eac..0d3e3e87d72dd 100644 --- a/ext/intl/tests/formatter_get_set_pattern2.phpt +++ b/ext/intl/tests/formatter_get_set_pattern2.phpt @@ -37,6 +37,10 @@ function ut_main() ut_nfmt_set_pattern($fmt, str_repeat('@', 200)); $res_str .= "New pattern: '" . ut_nfmt_get_pattern( $fmt ) . "'\n"; $res_str .= "Formatted number: " . ut_nfmt_format( $fmt, $test_value ) . "\n"; + $res = ut_nfmt_set_pattern( $fmt, "0.0 .#.#.#"); + if ($res !== false) + die("ut_nfmt_set_pattern should have failed"); + $res_str .= ut_nfmt_get_error_message( $fmt ) . " (" . ut_nfmt_get_error_code( $fmt ) . ")\n"; return $res_str; } @@ -52,3 +56,4 @@ New pattern: '0.0' Formatted number: 12345.1 New pattern: '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' Formatted number: 12345.123456000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +Error setting pattern value at line 0, offset 0: U_UNQUOTED_SPECIAL (65555)