diff --git a/adb/adb_utils.h b/adb/adb_utils.h index a85ca8c84..8b0dcee83 100644 --- a/adb/adb_utils.h +++ b/adb/adb_utils.h @@ -110,7 +110,7 @@ inline std::string_view StripTrailingNulls(std::string_view str) { // Base-10 stroll on a string_view. template -inline bool ParseUint(T* result, std::string_view str, std::string_view* remaining) { +inline bool ParseUint(T* result, std::string_view str, std::string_view* remaining = nullptr) { if (str.empty() || !isdigit(str[0])) { return false; } @@ -135,6 +135,9 @@ inline bool ParseUint(T* result, std::string_view str, std::string_view* remaini *result = value; if (remaining) { *remaining = str.substr(it - str.begin()); + } else { + return it == str.end(); } + return true; } diff --git a/adb/adb_utils_test.cpp b/adb/adb_utils_test.cpp index 8518e1782..bd676c2de 100644 --- a/adb/adb_utils_test.cpp +++ b/adb/adb_utils_test.cpp @@ -206,6 +206,14 @@ void TestParseUint(std::string_view string, bool expected_success, uint32_t expe EXPECT_EQ(remaining, "foo"); } } + + // With trailing text, without remaining. + { + std::string text = std::string(string) + "foo"; + uint32_t value; + bool success = ParseUint(&value, text, nullptr); + EXPECT_EQ(success, false); + } } TEST(adb_utils, ParseUint) {