spiffs: check if OBJ_NAME_LEN + OBJ_META_LEN is within limits

The limit was mentioned in spiffs_config.h but was not checked.

Fixes https://github.com/espressif/esp-idf/issues/1546
This commit is contained in:
Ivan Grokhotkov 2018-01-28 23:19:43 +08:00
parent 507a3a6391
commit 594d5c1436
2 changed files with 13 additions and 5 deletions

View file

@ -76,10 +76,12 @@ config SPIFFS_OBJ_NAME_LEN
default 32 default 32
range 1 256 range 1 256
help help
Object name maximum length. Note that this length Object name maximum length. Note that this length include the
include the zero-termination character, zero-termination character, meaning maximum string of characters
meaning maximum string of characters can at most be can at most be SPIFFS_OBJ_NAME_LEN - 1.
SPIFFS_OBJ_NAME_LEN - 1.
SPIFFS_OBJ_NAME_LEN + SPIFFS_META_LENGTH should not exceed
SPIFFS_PAGE_SIZE - 64.
config SPIFFS_USE_MAGIC config SPIFFS_USE_MAGIC
bool "Enable SPIFFS Filesystem Magic" bool "Enable SPIFFS Filesystem Magic"
@ -109,6 +111,9 @@ config SPIFFS_META_LENGTH
Set this to at least 4 bytes to enable support for saving file Set this to at least 4 bytes to enable support for saving file
modification time. modification time.
SPIFFS_OBJ_NAME_LEN + SPIFFS_META_LENGTH should not exceed
SPIFFS_PAGE_SIZE - 64.
config SPIFFS_USE_MTIME config SPIFFS_USE_MTIME
bool "Save file modification time" bool "Save file modification time"
default "y" default "y"

View file

@ -153,12 +153,15 @@ extern void spiffs_api_unlock(struct spiffs_t *fs);
// changes the on-disk format, so the change is not backward-compatible. // changes the on-disk format, so the change is not backward-compatible.
// //
// Do note: the meta length must never exceed // Do note: the meta length must never exceed
// logical_page_size - (SPIFFS_OBJ_NAME_LEN + 64) // logical_page_size - (SPIFFS_OBJ_NAME_LEN + SPIFFS_PAGE_EXTRA_SIZE)
// //
// This is derived from following: // This is derived from following:
// logical_page_size - (SPIFFS_OBJ_NAME_LEN + sizeof(spiffs_page_header) + // logical_page_size - (SPIFFS_OBJ_NAME_LEN + sizeof(spiffs_page_header) +
// spiffs_object_ix_header fields + at least some LUT entries) // spiffs_object_ix_header fields + at least some LUT entries)
#define SPIFFS_OBJ_META_LEN (CONFIG_SPIFFS_META_LENGTH) #define SPIFFS_OBJ_META_LEN (CONFIG_SPIFFS_META_LENGTH)
#define SPIFFS_PAGE_EXTRA_SIZE (64)
_Static_assert(SPIFFS_OBJ_META_LEN + SPIFFS_OBJ_NAME_LEN + SPIFFS_PAGE_EXTRA_SIZE
<= CONFIG_SPIFFS_PAGE_SIZE, "SPIFFS_OBJ_META_LEN or SPIFFS_OBJ_NAME_LEN too long");
// Size of buffer allocated on stack used when copying data. // Size of buffer allocated on stack used when copying data.
// Lower value generates more read/writes. No meaning having it bigger // Lower value generates more read/writes. No meaning having it bigger