Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/littlefs-project/littlefs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorChristopher Haster <chaster@utexas.edu>2019-01-31 23:54:47 +0300
committerChristopher Haster <chaster@utexas.edu>2019-01-31 23:59:19 +0300
commit10dfc36f08081274e37133107fff3a14d180b5e4 (patch)
tree8b2c303a25d1df429601e77cc010800faf778781 /tests
parent95c1a6339ddd9e0dbbc19bf0be0c37f629af2b5d (diff)
Fixed issue with long names causing unbounded recursion
This was caused by any commit containing entries large enough to _always_ force a compaction. This would cause littlefs to think that it would need to split infinitely because there was no base case. The fix here is pretty simple: treat any commit with only a single entry as unsplittable. This forces littlefs to first try overcompacting (fitting more in a block than what has optimal runtime), and then failing that return LFS_ERR_NOSPC for higher layers to handle. found by TheLoneWolfling
Diffstat (limited to 'tests')
-rwxr-xr-xtests/test_paths.sh24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/test_paths.sh b/tests/test_paths.sh
index 999001a..b1d41a7 100755
--- a/tests/test_paths.sh
+++ b/tests/test_paths.sh
@@ -165,5 +165,29 @@ tests/test.py << TEST
lfs_unmount(&lfs) => 0;
TEST
+echo "--- Really big path test ---"
+tests/test.py << TEST
+ lfs_mount(&lfs, &cfg) => 0;
+ memset(buffer, 'w', LFS_NAME_MAX);
+ buffer[LFS_NAME_MAX+1] = '\0';
+ lfs_mkdir(&lfs, (char*)buffer) => 0;
+ lfs_remove(&lfs, (char*)buffer) => 0;
+ lfs_file_open(&lfs, &file[0], (char*)buffer,
+ LFS_O_WRONLY | LFS_O_CREAT) => 0;
+ lfs_file_close(&lfs, &file[0]) => 0;
+ lfs_remove(&lfs, (char*)buffer) => 0;
+
+ memcpy(buffer, "coffee/", strlen("coffee/"));
+ memset(buffer+strlen("coffee/"), 'w', LFS_NAME_MAX);
+ buffer[strlen("coffee/")+LFS_NAME_MAX+1] = '\0';
+ lfs_mkdir(&lfs, (char*)buffer) => 0;
+ lfs_remove(&lfs, (char*)buffer) => 0;
+ lfs_file_open(&lfs, &file[0], (char*)buffer,
+ LFS_O_WRONLY | LFS_O_CREAT) => 0;
+ lfs_file_close(&lfs, &file[0]) => 0;
+ lfs_remove(&lfs, (char*)buffer) => 0;
+ lfs_unmount(&lfs) => 0;
+TEST
+
echo "--- Results ---"
tests/stats.py