From 9387ce0c17c3cd84ef8b84a28abdaef44d7f0220 Mon Sep 17 00:00:00 2001 From: Daniel Kulp Date: Sat, 18 Nov 2023 03:49:11 -0500 Subject: [PATCH] Try to detect corrupt eeprom and not crash --- src/non-gpl/CapeUtils/CapeUtils.cpp | 15 ++++++++++++--- src/non-gpl/CapeUtils/CapeUtils.h | 1 + src/non-gpl/CapeUtils/fppcapedetect.cpp | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/non-gpl/CapeUtils/CapeUtils.cpp b/src/non-gpl/CapeUtils/CapeUtils.cpp index 443a33c0d..ba75d5fdb 100644 --- a/src/non-gpl/CapeUtils/CapeUtils.cpp +++ b/src/non-gpl/CapeUtils/CapeUtils.cpp @@ -551,8 +551,13 @@ class CapeInfo { findCapeEEPROM(); if (EEPROM != "") { - parseEEPROM(); - processEEPROM(); + try { + parseEEPROM(); + processEEPROM(); + } catch (std::exception& ex) { + corruptEEPROM = true; + printf("Corrupt EEPROM: %s\n", ex.what()); + } } loadFiles(); std::filesystem::remove_all(outputPath); @@ -562,6 +567,9 @@ class CapeInfo { } CapeUtils::CapeStatus capeStatus() { + if (corruptEEPROM) { + return CapeUtils::CapeStatus::CORRUPT; + } if (validSignature) { if (ORIGEEPROM.find("sys/bus/i2c") != std::string::npos) { return CapeUtils::CapeStatus::SIGNED; @@ -678,7 +686,7 @@ class CapeInfo { printf("Couldn't get eeprom\n"); } printf("Copyng eeprom %s -> %s\n", EEPROM.c_str(), "/home/fpp/media/tmp/eeprom.bin"); - removeIfExist( "/home/fpp/media/tmp/eeprom.bin"); + removeIfExist("/home/fpp/media/tmp/eeprom.bin"); copyFile(EEPROM, "/home/fpp/media/tmp/eeprom.bin"); ORIGEEPROM = EEPROM; put_file_contents("/home/fpp/media/tmp/eeprom_location.txt", (uint8_t*)ORIGEEPROM.c_str(), ORIGEEPROM.size()); @@ -1224,6 +1232,7 @@ class CapeInfo { bool validSignature = false; bool hasSignature = false; bool validEpromLocation = true; + bool corruptEEPROM = false; std::map> fileMap; }; diff --git a/src/non-gpl/CapeUtils/CapeUtils.h b/src/non-gpl/CapeUtils/CapeUtils.h index a88be6d21..8501fca8a 100644 --- a/src/non-gpl/CapeUtils/CapeUtils.h +++ b/src/non-gpl/CapeUtils/CapeUtils.h @@ -26,6 +26,7 @@ class CapeUtils { enum class CapeStatus { NOT_PRESENT, + CORRUPT, UNSIGNED, SIGNED_GENERIC, SIGNED diff --git a/src/non-gpl/CapeUtils/fppcapedetect.cpp b/src/non-gpl/CapeUtils/fppcapedetect.cpp index 26ef5c388..19b132029 100644 --- a/src/non-gpl/CapeUtils/fppcapedetect.cpp +++ b/src/non-gpl/CapeUtils/fppcapedetect.cpp @@ -20,7 +20,7 @@ int main(int argc, char* argv[]) { std::filesystem::remove_all(entry.path()); } - if (CapeUtils::INSTANCE.initCape(false) == CapeUtils::CapeStatus::NOT_PRESENT) { + if (CapeUtils::INSTANCE.initCape(false) == CapeUtils::CapeStatus::NOT_PRESENT || CapeUtils::INSTANCE.initCape(false) == CapeUtils::CapeStatus::CORRUPT) { exit(-1); } }