1
0
Fork 0

Fix #14234, 16b4e73: Skip PLURAL data if parameter is invalid. (#14236)

pull/13264/head
Peter Nelson 2025-05-08 09:06:56 +01:00 committed by GitHub
parent 1d18b4a80b
commit ae1f469aac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 11 additions and 0 deletions

View File

@ -765,6 +765,16 @@ static int DeterminePluralForm(int64_t count, uint plural_form)
}
}
static void SkipStringChoice(StringConsumer &consumer)
{
uint n = consumer.ReadUint8();
uint len = 0;
for (uint i = 0; i != n; i++) {
len += consumer.ReadUint8();
}
consumer.Skip(len);
}
static void ParseStringChoice(StringConsumer &consumer, uint form, StringBuilder &builder)
{
/* <NUM> {Length of each string} {each string} */
@ -1196,6 +1206,7 @@ static void FormatString(StringBuilder &builder, std::string_view str_arg, Strin
if (v != nullptr) {
ParseStringChoice(consumer, DeterminePluralForm(static_cast<int64_t>(*v), plural_form), builder);
} else {
SkipStringChoice(consumer);
builder += "(invalid PLURAL parameter)";
}
break;