From 630f29e0dbeb11820f7c6b8d8116881a5b45d123 Mon Sep 17 00:00:00 2001 From: Daniel Zheng Date: Fri, 28 Apr 2023 14:06:45 -0700 Subject: [PATCH] Updating fastboot-info version check Updating version to just be a single number. Reason for updating is to keep format the same as Flashstation's Test: fastboot_test Bug: 194686221 Change-Id: I21ab0747e620d3f6d05c5170c3e55707eed0288a --- fastboot/fastboot.cpp | 31 +++++++++++-------------------- fastboot/fastboot.h | 3 ++- fastboot/task_test.cpp | 25 ++++++++++++++++--------- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp index cdcd0363a..b099f7791 100644 --- a/fastboot/fastboot.cpp +++ b/fastboot/fastboot.cpp @@ -1663,20 +1663,6 @@ void AddResizeTasks(const FlashingPlan* fp, std::vector>* return; } -static bool IsNumber(const std::string& s) { - bool period = false; - for (size_t i = 0; i < s.length(); i++) { - if (!isdigit(s[i])) { - if (!period && s[i] == '.' && i != 0 && i != s.length() - 1) { - period = true; - } else { - return false; - } - } - } - return true; -} - static bool IsIgnore(const std::vector& command) { if (command[0][0] == '#') { return true; @@ -1684,7 +1670,8 @@ static bool IsIgnore(const std::vector& command) { return false; } -bool CheckFastbootInfoRequirements(const std::vector& command) { +bool CheckFastbootInfoRequirements(const std::vector& command, + uint32_t host_tool_version) { if (command.size() != 2) { LOG(ERROR) << "unknown characters in version info in fastboot-info.txt -> " << android::base::Join(command, " "); @@ -1696,18 +1683,20 @@ bool CheckFastbootInfoRequirements(const std::vector& command) { return false; } - if (!IsNumber(command[1])) { - LOG(ERROR) << "version number contains non-numeric values in fastboot-info.txt -> " + uint32_t fastboot_info_version; + if (!android::base::ParseUint(command[1], &fastboot_info_version)) { + LOG(ERROR) << "version number contains non-numeric characters in fastboot-info.txt -> " << android::base::Join(command, " "); return false; } LOG(VERBOSE) << "Checking 'fastboot-info.txt version'"; - if (command[1] < PLATFORM_TOOLS_VERSION) { + if (fastboot_info_version <= host_tool_version) { return true; } + LOG(ERROR) << "fasboot-info.txt version: " << command[1] - << " not compatible with host tool version --> " << PLATFORM_TOOLS_VERSION; + << " not compatible with host tool version --> " << host_tool_version; return false; } @@ -1721,7 +1710,9 @@ std::vector> ParseFastbootInfo(const FlashingPlan* fp, continue; } if (command.size() > 1 && command[0] == "version") { - if (!CheckFastbootInfoRequirements(command)) { + uint32_t platform_tools_version; + android::base::ParseUint(PLATFORM_TOOLS_VERSION, &platform_tools_version); + if (!CheckFastbootInfoRequirements(command, platform_tools_version)) { return {}; } continue; diff --git a/fastboot/fastboot.h b/fastboot/fastboot.h index d6afb9ed8..80b77a0e9 100644 --- a/fastboot/fastboot.h +++ b/fastboot/fastboot.h @@ -133,7 +133,8 @@ void syntax_error(const char* fmt, ...); std::string get_current_slot(); // Code for Parsing fastboot-info.txt -bool CheckFastbootInfoRequirements(const std::vector& command); +bool CheckFastbootInfoRequirements(const std::vector& command, + uint32_t host_tool_version); std::unique_ptr ParseFlashCommand(const FlashingPlan* fp, const std::vector& parts); std::unique_ptr ParseRebootCommand(const FlashingPlan* fp, diff --git a/fastboot/task_test.cpp b/fastboot/task_test.cpp index 6fc20562a..b4e139b8d 100644 --- a/fastboot/task_test.cpp +++ b/fastboot/task_test.cpp @@ -89,20 +89,27 @@ TEST_F(ParseTest, CorrectFlashTaskFormed) { } TEST_F(ParseTest, VersionCheckCorrect) { - std::vector correct_versions = { - "version 1.0", - "version 22.00", - }; + std::vector correct_versions = {"version 1", "version 22", "version 5", + "version 17"}; - std::vector bad_versions = {"version", "version .01", "version x1", - "version 1.0.1", "version 1.", "s 1.0", - "version 1.0 2.0"}; + std::vector bad_versions = {"version", "version .01", "version x1", + "version 1.0.1", "version 1.", "s 1.0", + "version 1.0 2.0", "version 100.00", "version 1 2"}; for (auto& version : correct_versions) { - ASSERT_TRUE(CheckFastbootInfoRequirements(android::base::Split(version, " "))) << version; + ASSERT_TRUE(CheckFastbootInfoRequirements(android::base::Split(version, " "), 26)) + << version; } + + // returning False for failing version check + for (auto& version : correct_versions) { + ASSERT_FALSE(CheckFastbootInfoRequirements(android::base::Split(version, " "), 0)) + << version; + } + // returning False for bad format for (auto& version : bad_versions) { - ASSERT_FALSE(CheckFastbootInfoRequirements(android::base::Split(version, " "))) << version; + ASSERT_FALSE(CheckFastbootInfoRequirements(android::base::Split(version, " "), 100)) + << version; } }