diff --git a/ext/intl/msgformat/msgformat_attr.c b/ext/intl/msgformat/msgformat_attr.c index f7e712f971df9..e5bb286227407 100644 --- a/ext/intl/msgformat/msgformat_attr.c +++ b/ext/intl/msgformat/msgformat_attr.c @@ -52,6 +52,7 @@ PHP_FUNCTION( msgfmt_set_pattern ) size_t value_len = 0; int32_t spattern_len = 0; UChar* spattern = NULL; + UParseError spattern_error; MSG_FORMAT_METHOD_INIT_VARS; /* Parse parameters. */ @@ -75,12 +76,17 @@ PHP_FUNCTION( msgfmt_set_pattern ) } #endif - /* TODO: add parse error information */ - umsg_applyPattern(MSG_FORMAT_OBJECT(mfo), spattern, spattern_len, NULL, &INTL_DATA_ERROR_CODE(mfo)); + umsg_applyPattern(MSG_FORMAT_OBJECT(mfo), spattern, spattern_len, &spattern_error, &INTL_DATA_ERROR_CODE(mfo)); if (spattern) { efree(spattern); } - INTL_METHOD_CHECK_STATUS(mfo, "Error setting symbol value"); + if (U_FAILURE(INTL_DATA_ERROR_CODE(mfo))) { + char *msg; + spprintf(&msg, 0, "Error setting symbol value at line %d, offset %d", spattern_error.line, spattern_error.offset); + intl_errors_set_custom_msg(INTL_DATA_ERROR_P(mfo), msg, 1); + efree(msg); + RETURN_FALSE; + } if(mfo->mf_data.orig_format) { efree(mfo->mf_data.orig_format); diff --git a/ext/intl/tests/msgfmt_get_set_pattern.phpt b/ext/intl/tests/msgfmt_get_set_pattern.phpt index d8a9ccc9ca602..4a667b0b0073d 100644 --- a/ext/intl/tests/msgfmt_get_set_pattern.phpt +++ b/ext/intl/tests/msgfmt_get_set_pattern.phpt @@ -35,6 +35,9 @@ function ut_main() ut_msgfmt_set_pattern($fmt, str_repeat($pattern, 10)); $res_str .= "New pattern: '" . ut_msgfmt_get_pattern( $fmt ) . "'\n"; $res_str .= "Formatted message: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n"; + $res = ut_msgfmt_set_pattern($fmt, "{0,number} trees hosting {1,number monkeys"); + if ($res !== false) die("ut_msgfmt_set_pattern should fail"); + $res_str .= ut_msgfmt_get_error_message( $fmt ) . " (" . ut_msgfmt_get_error_code( $fmt ) . ")\n"; return $res_str; @@ -51,3 +54,4 @@ New pattern: '{0,number} trees hosting {1,number} monkeys' Formatted message: 123 trees hosting 456 monkeys New pattern: '{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys{0,number} trees hosting {1,number} monkeys' Formatted message: 123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys123 trees hosting 456 monkeys +Error setting symbol value at line 0, offset 26: U_PATTERN_SYNTAX_ERROR (65799)