From fc24aa1ef56d112ca286ba8cb69a32f600ba092b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 7 May 2025 23:50:17 +0100 Subject: [PATCH] Fix #14234, 16b4e73: Skip PLURAL data if parameter is invalid. --- src/strings.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/strings.cpp b/src/strings.cpp index e0bcb91b7f..2057964664 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -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) { /* {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(*v), plural_form), builder); } else { + SkipStringChoice(consumer); builder += "(invalid PLURAL parameter)"; } break;