From 968144ad93284ea904e97d3dcf49b6bf0bf65de5 Mon Sep 17 00:00:00 2001 From: Muszic Date: Thu, 3 Sep 2026 15:38:34 +0530 Subject: [PATCH] Reject empty values for integer flags --- googletest/src/gtest-port.cc | 8 +++++--- googletest/test/gtest_unittest.cc | 20 ++++++++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/googletest/src/gtest-port.cc b/googletest/src/gtest-port.cc index be5b16e7..9ed5fd14 100644 --- a/googletest/src/gtest-port.cc +++ b/googletest/src/gtest-port.cc @@ -1360,9 +1360,11 @@ bool ParseInt32(const Message& src_text, const char* str, int32_t* value) { char* end = nullptr; const long long_value = strtol(str, &end, 10); // NOLINT - // Has strtol() consumed all characters in the string? - if (*end != '\0') { - // No - an invalid character was encountered. + // Has strtol() consumed at least one character and all characters in the + // string? + if (end == str || *end != '\0') { + // No - either no characters were consumed or an invalid character was + // encountered. Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc index 1fed02c3..8d848783 100644 --- a/googletest/test/gtest_unittest.cc +++ b/googletest/test/gtest_unittest.cc @@ -1773,10 +1773,12 @@ TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) { printf("(expecting 2 warnings)\n"); int32_t value = 123; - EXPECT_FALSE(ParseFlag("--abc=12345678987654321", "abc", &value)); + EXPECT_FALSE(ParseFlag("--" GTEST_FLAG_PREFIX_ "abc=12345678987654321", "abc", + &value)); EXPECT_EQ(123, value); - EXPECT_FALSE(ParseFlag("--abc=-12345678987654321", "abc", &value)); + EXPECT_FALSE(ParseFlag("--" GTEST_FLAG_PREFIX_ "abc=-12345678987654321", + "abc", &value)); EXPECT_EQ(123, value); } @@ -1787,10 +1789,20 @@ TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) { printf("(expecting 2 warnings)\n"); int32_t value = 123; - EXPECT_FALSE(ParseFlag("--abc=A1", "abc", &value)); + EXPECT_FALSE(ParseFlag("--" GTEST_FLAG_PREFIX_ "abc=A1", "abc", &value)); EXPECT_EQ(123, value); - EXPECT_FALSE(ParseFlag("--abc=12X", "abc", &value)); + EXPECT_FALSE(ParseFlag("--" GTEST_FLAG_PREFIX_ "abc=12X", "abc", &value)); + EXPECT_EQ(123, value); +} + +// Tests that ParseInt32Flag() rejects an empty value and doesn't change the +// output value. +TEST(ParseInt32FlagTest, RejectsEmptyValue) { + printf("(expecting 1 warning)\n"); + + int32_t value = 123; + EXPECT_FALSE(ParseFlag("--" GTEST_FLAG_PREFIX_ "abc=", "abc", &value)); EXPECT_EQ(123, value); }