mirror of
https://github.com/pellepl/spiffs.git
synced 2026-06-05 21:15:18 +00:00
fixes #165
This commit is contained in:
@@ -481,7 +481,6 @@ s32_t SPIFFS_write(spiffs *fs, spiffs_file fh, void *buf, s32_t len) {
|
||||
if ((fd->flags & SPIFFS_O_APPEND)) {
|
||||
fd->fdoffset = fd->size == SPIFFS_UNDEFINED_LEN ? 0 : fd->size;
|
||||
}
|
||||
|
||||
offset = fd->fdoffset;
|
||||
|
||||
#if SPIFFS_CACHE_WR
|
||||
|
||||
@@ -1061,12 +1061,18 @@ void spiffs_cb_object_event(
|
||||
#if SPIFFS_TEMPORAL_FD_CACHE
|
||||
if (cur_fd->score == 0) continue; // never used fd
|
||||
#endif
|
||||
SPIFFS_DBG(" callback: setting fd "_SPIPRIfd":"_SPIPRIid"(fdoffs:"_SPIPRIi" offs:"_SPIPRIi") objix_hdr_pix to "_SPIPRIpg", size:"_SPIPRIi"\n", SPIFFS_FH_OFFS(fs, cur_fd->file_nbr), cur_fd->obj_id, cur_fd->fdoffset, cur_fd->offset, new_pix, new_size);
|
||||
SPIFFS_DBG(" callback: setting fd "_SPIPRIfd":"_SPIPRIid"(fdoffs:"_SPIPRIi" offs:"_SPIPRIi") objix_hdr_pix to "_SPIPRIpg", size:"_SPIPRIi"\n",
|
||||
SPIFFS_FH_OFFS(fs, cur_fd->file_nbr), cur_fd->obj_id, cur_fd->fdoffset, cur_fd->offset, new_pix, new_size);
|
||||
cur_fd->objix_hdr_pix = new_pix;
|
||||
if (new_size != 0) {
|
||||
// update size and offsets for fds to this file
|
||||
cur_fd->size = new_size;
|
||||
u32_t act_new_size = new_size == SPIFFS_UNDEFINED_LEN ? 0 : new_size;
|
||||
#if SPIFFS_CACHE_WR
|
||||
if (act_new_size > 0 && cur_fd->cache_page) {
|
||||
act_new_size = MAX(act_new_size, cur_fd->cache_page->offset + cur_fd->cache_page->size);
|
||||
}
|
||||
#endif
|
||||
if (cur_fd->offset > act_new_size) {
|
||||
cur_fd->offset = act_new_size;
|
||||
}
|
||||
|
||||
@@ -1199,6 +1199,37 @@ TEST(remove_release_fd_152) {
|
||||
return TEST_RES_OK;
|
||||
} TEST_END
|
||||
|
||||
TEST(certain_file_size_fail_165) {
|
||||
fs_reset_specific(0, 0, 512*1024, 4*1024, 64*1024, 256);
|
||||
const int NUM = 134;
|
||||
const int SIZ = 200;
|
||||
u8_t buf[SIZ];
|
||||
|
||||
TEST_CHECK_EQ(SPIFFS_creat(FS, "test", 0), SPIFFS_OK);
|
||||
spiffs_file fd = SPIFFS_open(FS, "test", SPIFFS_O_CREAT | SPIFFS_O_WRONLY, 0);
|
||||
TEST_CHECK_GT(fd, 0);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < NUM; i++) {
|
||||
TEST_CHECK_EQ(SPIFFS_write(FS, fd, buf, SIZ), SIZ);
|
||||
}
|
||||
TEST_CHECK_EQ(SPIFFS_close(FS, fd), SPIFFS_OK);
|
||||
fd = SPIFFS_open(FS, "test", SPIFFS_O_RDONLY, 0);
|
||||
TEST_CHECK_GT(fd, 0);
|
||||
|
||||
spiffs_stat s;
|
||||
TEST_CHECK_EQ(SPIFFS_fstat(FS, fd, &s), SPIFFS_OK);
|
||||
TEST_CHECK_EQ(s.size, NUM*SIZ);
|
||||
|
||||
int size = 0;
|
||||
for (i = 0; i < NUM; i++) {
|
||||
size += SPIFFS_read(FS, fd, buf, SIZ);
|
||||
}
|
||||
TEST_CHECK_EQ(size, NUM*SIZ);
|
||||
|
||||
return TEST_RES_OK;
|
||||
} TEST_END
|
||||
|
||||
|
||||
SUITE_TESTS(bug_tests)
|
||||
ADD_TEST(nodemcu_full_fs_1)
|
||||
@@ -1221,6 +1252,7 @@ SUITE_TESTS(bug_tests)
|
||||
ADD_TEST(fuzzer_found_3)
|
||||
ADD_TEST(fuzzer_found_4)
|
||||
ADD_TEST(remove_release_fd_152)
|
||||
ADD_TEST(certain_file_size_fail_165)
|
||||
ADD_TEST_NON_DEFAULT(fuzzer_found_single_1)
|
||||
ADD_TEST_NON_DEFAULT(log_afl_test)
|
||||
ADD_TEST_NON_DEFAULT(afl_test)
|
||||
|
||||
@@ -645,6 +645,14 @@ int read_and_verify_fd(spiffs_file fd, char *name) {
|
||||
printf(" read_and_verify: could not stat file %s\n", name);
|
||||
return res;
|
||||
}
|
||||
|
||||
off_t fsize = lseek(pfd, 0, SEEK_END);
|
||||
if (s.size != fsize) {
|
||||
printf(" read_and_verify: size differs, %s spiffs:%d!=fs:%ld\n", name, s.size, fsize);
|
||||
return -1;
|
||||
}
|
||||
lseek(pfd, 0, SEEK_SET);
|
||||
|
||||
if (s.size == 0) {
|
||||
SPIFFS_close(&__fs, fd);
|
||||
close(pfd);
|
||||
|
||||
Reference in New Issue
Block a user