From ed9f3d795048b86233bb9670919a048cdd0619a0 Mon Sep 17 00:00:00 2001 From: yi chen <94xhn1@gmail.com> Date: Mon, 13 Jul 2026 08:29:48 +0800 Subject: [PATCH 1/2] fix(spiffs): fix off-by-one in spiffsgen.py obj name length check SpiffsFS.create_file() rejected names only when strictly longer than obj_name_len, but CONFIG_SPIFFS_OBJ_NAME_LEN's documented semantics (see components/spiffs/Kconfig) are that the length includes the zero-termination character, so the maximum number of actual name characters is obj_name_len - 1. With the old check, a name exactly obj_name_len characters long was accepted. SpiffsObjIndexPage.to_binary() then computes the NUL padding after the name as (obj_name_len - len(name)), which is 0 in that case, so the generated image's fixed-size name field ends up with no NUL terminator anywhere in its reserved region. Fix the boundary so the generator enforces the same maximum length that the Kconfig help text documents. --- components/spiffs/spiffsgen.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/components/spiffs/spiffsgen.py b/components/spiffs/spiffsgen.py index c621fe8a161..77a1b8d155b 100755 --- a/components/spiffs/spiffsgen.py +++ b/components/spiffs/spiffsgen.py @@ -403,7 +403,13 @@ class SpiffsFS(object): return self.remaining_blocks <= 0 def create_file(self, img_path, file_path): # type: (str, str) -> None - if len(img_path) > self.build_config.obj_name_len: + # obj_name_len includes the zero-termination character (see Kconfig + # help for CONFIG_SPIFFS_OBJ_NAME_LEN), so the maximum number of + # actual name characters is obj_name_len - 1. Without the "- 1" here, + # a name exactly obj_name_len characters long is wrongly accepted and + # SpiffsObjIndexPage.to_binary() ends up writing zero NUL bytes into + # the reserved name field. + if len(img_path) > self.build_config.obj_name_len - 1: raise RuntimeError("object name '%s' too long" % img_path) name = img_path From fe8249a9a74c7f62279743dbf48402993fc3eeef Mon Sep 17 00:00:00 2001 From: "sonika.rathi" Date: Thu, 16 Jul 2026 09:52:08 +0200 Subject: [PATCH 2/2] fix(spiffs): shorten obj_name_len guard comment --- components/spiffs/spiffsgen.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/components/spiffs/spiffsgen.py b/components/spiffs/spiffsgen.py index 77a1b8d155b..d73c6f1a938 100755 --- a/components/spiffs/spiffsgen.py +++ b/components/spiffs/spiffsgen.py @@ -403,12 +403,7 @@ class SpiffsFS(object): return self.remaining_blocks <= 0 def create_file(self, img_path, file_path): # type: (str, str) -> None - # obj_name_len includes the zero-termination character (see Kconfig - # help for CONFIG_SPIFFS_OBJ_NAME_LEN), so the maximum number of - # actual name characters is obj_name_len - 1. Without the "- 1" here, - # a name exactly obj_name_len characters long is wrongly accepted and - # SpiffsObjIndexPage.to_binary() ends up writing zero NUL bytes into - # the reserved name field. + # obj_name_len includes NUL (CONFIG_SPIFFS_OBJ_NAME_LEN); max chars is obj_name_len - 1. if len(img_path) > self.build_config.obj_name_len - 1: raise RuntimeError("object name '%s' too long" % img_path)