From 55996e2e30cd0dc3a73dbb233e8620fec1ff36bf Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Tue, 20 Sep 2022 13:24:16 -0700 Subject: Explicitly disallows modifiers for use with %v. PiperOrigin-RevId: 475636693 Change-Id: Idb7c2b9c36ad8e59f24ff7df179a207d301d9e89 --- absl/strings/internal/str_format/parser.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'absl/strings/internal') diff --git a/absl/strings/internal/str_format/parser.cc b/absl/strings/internal/str_format/parser.cc index 3d987334..f9bb6615 100644 --- a/absl/strings/internal/str_format/parser.cc +++ b/absl/strings/internal/str_format/parser.cc @@ -202,6 +202,10 @@ const char *ConsumeConversion(const char *pos, const char *const end, auto tag = GetTagForChar(c); + if (*(pos - 1) == 'v' && *(pos - 2) != '%') { + return nullptr; + } + if (ABSL_PREDICT_FALSE(!tag.is_conv())) { if (ABSL_PREDICT_FALSE(!tag.is_length())) return nullptr; @@ -312,11 +316,11 @@ bool ParsedFormatBase::MatchesConversions( std::initializer_list convs) const { std::unordered_set used; auto add_if_valid_conv = [&](int pos, char c) { - if (static_cast(pos) > convs.size() || - !Contains(convs.begin()[pos - 1], c)) - return false; - used.insert(pos); - return true; + if (static_cast(pos) > convs.size() || + !Contains(convs.begin()[pos - 1], c)) + return false; + used.insert(pos); + return true; }; for (const ConversionItem &item : items_) { if (!item.is_conversion) continue; -- cgit v1.2.3