@brief Validate ESP32 firmware image header @param data Pointer to firmware data (at least 24 bytes) @param len Length of firmware data @return true if firmware header is valid, false otherwise
| 425 | /// @param len Length of firmware data |
| 426 | /// @return true if firmware header is valid, false otherwise |
| 427 | bool validateESP32Firmware(const u8* data, size_t len) { |
| 428 | // Need at least 24 bytes for ESP32 image header |
| 429 | if (len < 24) { |
| 430 | FL_WARN("Firmware validation: header too small (" << len << " bytes)"); |
| 431 | return false; |
| 432 | } |
| 433 | |
| 434 | // Check ESP32 magic byte (0xE9) |
| 435 | if (data[0] != 0xE9) { |
| 436 | FL_WARN("Firmware validation: invalid magic byte 0x" |
| 437 | << (int)data[0] << " (expected 0xE9)"); |
| 438 | return false; |
| 439 | } |
| 440 | |
| 441 | // Check segment count is reasonable (1-16) |
| 442 | u8 segments = data[1]; |
| 443 | if (segments == 0 || segments > 16) { |
| 444 | FL_WARN("Firmware validation: invalid segment count " << (int)segments); |
| 445 | return false; |
| 446 | } |
| 447 | |
| 448 | FL_DBG("Firmware validation passed: magic=0xE9, segments=" << (int)segments); |
| 449 | return true; |
| 450 | } |
| 451 | |
| 452 | /// @brief HTTP handler for GET requests to root path (serves upload page) |
| 453 | /// @param req HTTP request handle |
no outgoing calls
no test coverage detected