Skip to content

Commit 90791fa

Browse files
committed
intl extension: msgfmt_set_pattern add pattern format error informations.
1 parent eb83e02 commit 90791fa

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

ext/intl/msgformat/msgformat_attr.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ PHP_FUNCTION( msgfmt_set_pattern )
5252
size_t value_len = 0;
5353
int32_t spattern_len = 0;
5454
UChar* spattern = NULL;
55+
UParseError spattern_error;
5556
MSG_FORMAT_METHOD_INIT_VARS;
5657

5758
/* Parse parameters. */
@@ -76,11 +77,17 @@ PHP_FUNCTION( msgfmt_set_pattern )
7677
#endif
7778

7879
/* TODO: add parse error information */
79-
umsg_applyPattern(MSG_FORMAT_OBJECT(mfo), spattern, spattern_len, NULL, &INTL_DATA_ERROR_CODE(mfo));
80+
umsg_applyPattern(MSG_FORMAT_OBJECT(mfo), spattern, spattern_len, &spattern_error, &INTL_DATA_ERROR_CODE(mfo));
8081
if (spattern) {
8182
efree(spattern);
8283
}
83-
INTL_METHOD_CHECK_STATUS(mfo, "Error setting symbol value");
84+
if (U_FAILURE(INTL_DATA_ERROR_CODE(mfo))) {
85+
char *msg;
86+
spprintf(&msg, 0, "Error setting symbol value at line %d, offset %d", spattern_error.line, spattern_error.offset);
87+
intl_errors_set_custom_msg(INTL_DATA_ERROR_P(mfo), msg, 1 );
88+
efree(msg);
89+
RETURN_FALSE;
90+
}
8491

8592
if(mfo->mf_data.orig_format) {
8693
efree(mfo->mf_data.orig_format);

ext/intl/tests/msgfmt_get_set_pattern.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ function ut_main()
3535
ut_msgfmt_set_pattern($fmt, str_repeat($pattern, 10));
3636
$res_str .= "New pattern: '" . ut_msgfmt_get_pattern( $fmt ) . "'\n";
3737
$res_str .= "Formatted message: " . ut_msgfmt_format( $fmt, array(123, 456) ) . "\n";
38+
$res = ut_msgfmt_set_pattern($fmt, "{0,number} trees hosting {1,number monkeys");
39+
if ($res !== false) die("ut_msgfmt_set_pattern should fail");
40+
$res_str .= ut_msgfmt_get_error_message( $fmt ) . " (" . ut_msgfmt_get_error_code( $fmt ) . ")\n";
3841

3942

4043
return $res_str;
@@ -51,3 +54,4 @@ New pattern: '{0,number} trees hosting {1,number} monkeys'
5154
Formatted message: 123 trees hosting 456 monkeys
5255
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'
5356
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
57+
Error setting symbol value at line 0, offset 26: U_PATTERN_SYNTAX_ERROR (65799)

0 commit comments

Comments
 (0)