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