This commit is contained in:
Peter Andersson
2017-09-09 09:27:32 +02:00
parent 3ebfeb5032
commit f5e26c4e93
4 changed files with 47 additions and 2 deletions
-1
View File
@@ -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
+7 -1
View File
@@ -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;
}
+32
View File
@@ -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)
+8
View File
@@ -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);