Skip to content

Commit 7b55802

Browse files
gekysimonqhughes
authored andcommitted
Filesystem: Fixed buffer overflow in FATFileSystem::open
Picked up by 'FSFAT_FOPEN_TEST_16: write/check n x 25kB data files.'
1 parent 8d6b1ed commit 7b55802

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

features/filesystem/fat/FATFileSystem.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,8 @@ int FATFileSystem::format(BlockDevice *bd, int allocation_unit) {
199199
FileHandle *FATFileSystem::open(const char* name, int flags) {
200200
lock();
201201
debug_if(FFS_DBG, "open(%s) on filesystem [%s], drv [%s]\n", name, getName(), _fsid);
202-
char n[64];
203-
sprintf(n, "%s:/%s", _fsid, name);
202+
char *buffer = new char[strlen(_fsid) + strlen(name) + 3];
203+
sprintf(buffer, "%s:/%s", _fsid, name);
204204

205205
/* POSIX flags -> FatFS open mode */
206206
BYTE openmode;
@@ -220,8 +220,10 @@ FileHandle *FATFileSystem::open(const char* name, int flags) {
220220
}
221221

222222
FIL fh;
223-
FRESULT res = f_open(&fh, n, openmode);
223+
FRESULT res = f_open(&fh, buffer, openmode);
224224
fat_filesystem_set_errno(res);
225+
delete[] buffer;
226+
225227
if (res) {
226228
debug_if(FFS_DBG, "f_open('w') failed: %d\n", res);
227229
unlock();

0 commit comments

Comments
 (0)