Skip to content

Commit 3fb7198

Browse files
committed
intl extension, follow up on #10006 for numfmt_set_pattern
Closes GH-10073.
1 parent fa3bbf0 commit 3fb7198

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ PHP NEWS
3636

3737
- Intl:
3838
. Added pattern format error infos for msgfmt_set_pattern. (David Carlier)
39+
. Added pattern format error infos for numfmt_set_pattern. (David Carlier)
3940

4041
- JSON:
4142
. Added json_validate(). (Juan Morales)

ext/intl/formatter/formatter_attr.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ PHP_FUNCTION( numfmt_set_pattern )
332332
size_t value_len = 0;
333333
int32_t slength = 0;
334334
UChar* svalue = NULL;
335+
UParseError spattern_error = {0};
335336
FORMATTER_METHOD_INIT_VARS;
336337

337338
/* Parse parameters. */
@@ -347,12 +348,17 @@ PHP_FUNCTION( numfmt_set_pattern )
347348
intl_convert_utf8_to_utf16(&svalue, &slength, value, value_len, &INTL_DATA_ERROR_CODE(nfo));
348349
INTL_METHOD_CHECK_STATUS( nfo, "Error converting pattern to UTF-16" );
349350

350-
/* TODO: add parse error information */
351-
unum_applyPattern(FORMATTER_OBJECT(nfo), 0, svalue, slength, NULL, &INTL_DATA_ERROR_CODE(nfo));
351+
unum_applyPattern(FORMATTER_OBJECT(nfo), 0, svalue, slength, &spattern_error, &INTL_DATA_ERROR_CODE(nfo));
352352
if (svalue) {
353353
efree(svalue);
354354
}
355-
INTL_METHOD_CHECK_STATUS( nfo, "Error setting pattern value" );
355+
if (U_FAILURE(INTL_DATA_ERROR_CODE(nfo))) {
356+
char *msg;
357+
spprintf(&msg, 0, "Error setting pattern value at line %d, offset %d", spattern_error.line, spattern_error.offset);
358+
intl_errors_set_custom_msg(INTL_DATA_ERROR_P(nfo), msg, 1);
359+
efree(msg);
360+
RETURN_FALSE;
361+
}
356362

357363
RETURN_TRUE;
358364
}

ext/intl/tests/formatter_get_set_pattern2.phpt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ function ut_main()
3737
ut_nfmt_set_pattern($fmt, str_repeat('@', 200));
3838
$res_str .= "New pattern: '" . ut_nfmt_get_pattern( $fmt ) . "'\n";
3939
$res_str .= "Formatted number: " . ut_nfmt_format( $fmt, $test_value ) . "\n";
40+
$res = ut_nfmt_set_pattern( $fmt, "0.0 .#.#.#");
41+
if ($res !== false)
42+
die("ut_nfmt_set_pattern should have failed");
43+
$res_str .= ut_nfmt_get_error_message( $fmt ) . " (" . ut_nfmt_get_error_code( $fmt ) . ")\n";
4044

4145
return $res_str;
4246
}
@@ -52,3 +56,4 @@ New pattern: '0.0'
5256
Formatted number: 12345.1
5357
New pattern: '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
5458
Formatted number: 12345.123456000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
59+
Error setting pattern value at line 0, offset 0: U_UNQUOTED_SPECIAL (65555)

0 commit comments

Comments
 (0)