From d1c7c046d58c3c3f15e1ce7af2f0b8625375bc83 Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Fri, 25 Jun 2021 15:30:42 -0700 Subject: [PATCH] Don't crash when includeing LittleFS.h w/no FS (#8173) * Don't crash when includeing LittleFS.h w/no FS The LittleFS constructor could cause a divide-by-zero error and crash the chip during pre-main startup (i.e. when the constructors were called). Avoid by only initializing the LittleFS control structure when there is a filesystem specified in the flash layout. * Be even more paranoid on begin() and format() --- libraries/LittleFS/src/LittleFS.h | 42 ++++++++++++++++--------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/libraries/LittleFS/src/LittleFS.h b/libraries/LittleFS/src/LittleFS.h index 26870243b..162b6729b 100644 --- a/libraries/LittleFS/src/LittleFS.h +++ b/libraries/LittleFS/src/LittleFS.h @@ -59,24 +59,26 @@ public: _mounted(false) { memset(&_lfs, 0, sizeof(_lfs)); memset(&_lfs_cfg, 0, sizeof(_lfs_cfg)); - _lfs_cfg.context = (void*) this; - _lfs_cfg.read = lfs_flash_read; - _lfs_cfg.prog = lfs_flash_prog; - _lfs_cfg.erase = lfs_flash_erase; - _lfs_cfg.sync = lfs_flash_sync; - _lfs_cfg.read_size = 64; - _lfs_cfg.prog_size = 64; - _lfs_cfg.block_size = _blockSize; - _lfs_cfg.block_count =_blockSize? _size / _blockSize: 0; - _lfs_cfg.block_cycles = 16; // TODO - need better explanation - _lfs_cfg.cache_size = 64; - _lfs_cfg.lookahead_size = 64; - _lfs_cfg.read_buffer = nullptr; - _lfs_cfg.prog_buffer = nullptr; - _lfs_cfg.lookahead_buffer = nullptr; - _lfs_cfg.name_max = 0; - _lfs_cfg.file_max = 0; - _lfs_cfg.attr_max = 0; + if (_size && _blockSize) { + _lfs_cfg.context = (void*) this; + _lfs_cfg.read = lfs_flash_read; + _lfs_cfg.prog = lfs_flash_prog; + _lfs_cfg.erase = lfs_flash_erase; + _lfs_cfg.sync = lfs_flash_sync; + _lfs_cfg.read_size = 64; + _lfs_cfg.prog_size = 64; + _lfs_cfg.block_size = _blockSize; + _lfs_cfg.block_count = _size / _blockSize; + _lfs_cfg.block_cycles = 16; // TODO - need better explanation + _lfs_cfg.cache_size = 64; + _lfs_cfg.lookahead_size = 64; + _lfs_cfg.read_buffer = nullptr; + _lfs_cfg.prog_buffer = nullptr; + _lfs_cfg.lookahead_buffer = nullptr; + _lfs_cfg.name_max = 0; + _lfs_cfg.file_max = 0; + _lfs_cfg.attr_max = 0; + } } ~LittleFSImpl() { @@ -181,7 +183,7 @@ public: } bool begin() override { - if (_size <= 0) { + if ((_blockSize <= 0) || (_size <= 0)) { DEBUGV("LittleFS size is <= zero"); return false; } @@ -203,7 +205,7 @@ public: } bool format() override { - if (_size == 0) { + if ((_blockSize <= 0) || (_size <= 0)) { DEBUGV("lfs size is zero\n"); return false; }