Skip to content

Commit e1c4a0a

Browse files
committed
Fixed GH-19261: msgfmt_parse_message leaks on message format failure.
close GH-19262
1 parent e16df98 commit e1c4a0a

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ PHP NEWS
1414
- Hash:
1515
. Fix crash on clone failure. (nielsdos)
1616

17+
- Intl:
18+
. Fixed GH-19261: msgfmt_parse_message leaks on message creation failure.
19+
(David Carlier)
20+
1721
- LDAP:
1822
. Fixed bug GH-18529 (additional inheriting of TLS int options).
1923
(Jakub Zelenka)

ext/intl/msgformat/msgformat_parse.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,11 @@ PHP_FUNCTION( msgfmt_parse_message )
127127
if(spattern && spattern_len) {
128128
efree(spattern);
129129
}
130-
INTL_METHOD_CHECK_STATUS(mfo, "Creating message formatter failed");
130+
INTL_METHOD_CHECK_STATUS_OR_GOTO(mfo, "Creating message formatter failed", clean);
131131

132132
msgfmt_do_parse(mfo, source, src_len, return_value);
133133

134+
clean:
134135
/* drop the temporary formatter */
135136
msgformat_data_free(&mfo->mf_data);
136137
}

ext/intl/tests/gh19261.phpt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
MessageFormatter::parseMessage() with invalid locale
3+
--EXTENSIONS--
4+
intl
5+
--CREDITS--
6+
girgias@php.net
7+
--FILE--
8+
<?php
9+
10+
$locale = 'root';
11+
$fmt = '{0,whatever} would not work!';
12+
13+
$str = 'failing';
14+
15+
$m = MessageFormatter::parseMessage($locale, $fmt, $str);
16+
var_dump($m);
17+
var_dump(intl_get_error_message());
18+
19+
$m = msgfmt_parse_message($locale, $fmt, $str);
20+
var_dump($m);
21+
var_dump(intl_get_error_message());
22+
23+
?>
24+
--EXPECT--
25+
bool(false)
26+
string(59) "Creating message formatter failed: U_ILLEGAL_ARGUMENT_ERROR"
27+
bool(false)
28+
string(59) "Creating message formatter failed: U_ILLEGAL_ARGUMENT_ERROR"

0 commit comments

Comments
 (0)