diff options
author | 2022-12-22 18:23:21 +0000 | |
---|---|---|
committer | 2023-01-02 13:14:00 +0000 | |
commit | 990ff7ba368f3d24ba6ac25321e326c82f13d620 (patch) | |
tree | 329959cd59a2921e132945d20fdd28eb6a67ddeb | |
parent | 6b65c0c7abd78b10583a27b80734fb672dea66aa (diff) |
Don't crash on invalid HID country code
Apple magic keyboard sends invalid hid country code 166 which is
not supported according to HID standards. Instead of throwing
fatal exception, assume any country code value out of the
standard range as invalid.
Test: manual testing. TODO: implement sysfs based test cases
Bug: 262703228
Change-Id: I7821473c31b08d23ebf91385fbe12dc9f758a472
-rw-r--r-- | services/inputflinger/reader/EventHub.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp index e26bc8c6dc..e9fa599b33 100644 --- a/services/inputflinger/reader/EventHub.cpp +++ b/services/inputflinger/reader/EventHub.cpp @@ -319,10 +319,11 @@ static InputDeviceCountryCode readCountryCodeLocked(const std::filesystem::path& std::string str; if (base::ReadFileToString(sysfsRootPath / "country", &str)) { hidCountryCode = std::stoi(str, nullptr, 16); - LOG_ALWAYS_FATAL_IF(hidCountryCode > 35 || hidCountryCode < 0, - "HID country code should be in range [0, 35]. Found country code " - "to be %d", - hidCountryCode); + if (hidCountryCode > 35 || hidCountryCode < 0) { + ALOGE("HID country code should be in range [0, 35], but for sysfs path %s it was %d", + sysfsRootPath.c_str(), hidCountryCode); + return InputDeviceCountryCode::INVALID; + } } return static_cast<InputDeviceCountryCode>(hidCountryCode); |