From 5e6a78131f7bd5940218462c07d88cdefdd75dbe Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Tue, 15 Jan 2019 08:49:10 -0800 Subject: Export of internal Abseil changes. -- 4a492de32dd1e02c5c3600bfdb36da7af7855210 by Samuel Benzaquen : Fix potential intergral overflow in the parser. PiperOrigin-RevId: 229378698 -- c5d5385eff879a65582138febb44c79725baf582 by CJ Johnson : Adds an explanatory comment over AbslHashValue(...) for InlinedVector PiperOrigin-RevId: 229237373 GitOrigin-RevId: 4a492de32dd1e02c5c3600bfdb36da7af7855210 Change-Id: Iad9edfde23ab5af9001ce80e3d00a34be3d73815 --- absl/container/inlined_vector.h | 4 ++++ absl/strings/internal/str_format/parser.cc | 3 ++- absl/strings/internal/str_format/parser_test.cc | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/absl/container/inlined_vector.h b/absl/container/inlined_vector.h index 7c574aec..4849f7ea 100644 --- a/absl/container/inlined_vector.h +++ b/absl/container/inlined_vector.h @@ -1354,6 +1354,10 @@ bool operator>=(const InlinedVector& a, return !(a < b); } +// AbslHashValue() +// +// Provides `absl::Hash` support for inlined vectors. You do not normally call +// this function directly. template Hash AbslHashValue(Hash hash, const InlinedVector& vec) { auto p = vec.data(); diff --git a/absl/strings/internal/str_format/parser.cc b/absl/strings/internal/str_format/parser.cc index 5e3d0d05..10487f23 100644 --- a/absl/strings/internal/str_format/parser.cc +++ b/absl/strings/internal/str_format/parser.cc @@ -99,10 +99,11 @@ bool ConsumeConversion(string_view *src, UnboundConversion *conv, // digit doesn't match the expected characters. int num_digits = std::numeric_limits::digits10; for (;;) { - if (ABSL_PREDICT_FALSE(pos == end || !num_digits)) break; + if (ABSL_PREDICT_FALSE(pos == end)) break; c = *pos++; if (!std::isdigit(c)) break; --num_digits; + if (ABSL_PREDICT_FALSE(!num_digits)) break; digits = 10 * digits + c - '0'; } return digits; diff --git a/absl/strings/internal/str_format/parser_test.cc b/absl/strings/internal/str_format/parser_test.cc index ae402031..ff705753 100644 --- a/absl/strings/internal/str_format/parser_test.cc +++ b/absl/strings/internal/str_format/parser_test.cc @@ -246,6 +246,8 @@ TEST_F(ConsumeUnboundConversionTest, WidthAndPrecision) { EXPECT_FALSE(Run("1000000000.999999999d")); EXPECT_FALSE(Run("999999999.1000000000d")); + EXPECT_FALSE(Run("9999999999d")); + EXPECT_FALSE(Run(".9999999999d")); } TEST_F(ConsumeUnboundConversionTest, Flags) { -- cgit v1.2.3