From e2e54a381bbe2fae7c1b925fc486fc9b816420d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 22 May 2014 15:56:11 +0200 Subject: [PATCH] FAT: Fixed some dirent pointer access issues. * Fixed #9806 which Ingo had analyzed perfectly, but then forgot to fix it. * Fixed CID 603015. --- src/add-ons/kernel/file_systems/fat/dir.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/fat/dir.c b/src/add-ons/kernel/file_systems/fat/dir.c index fbec44172b..62afde2f46 100644 --- a/src/add-ons/kernel/file_systems/fat/dir.c +++ b/src/add-ons/kernel/file_systems/fat/dir.c @@ -82,14 +82,17 @@ _next_dirent_(struct diri *iter, struct _dirent_info_ *oinfo, char *filename, iter->csi.sector, iter->current_index)); if (buffer[0] == 0) { // quit if at end of table if (start_index != 0xffff) { - dprintf("lfn entry (%s) with no alias\n", filename); + *puni = 0; + dprintf("lfn entry (%s) with no alias\n", uni); } return ENOENT; } if (buffer[0] == 0xe5) { // skip erased entries if (start_index != 0xffff) { - dprintf("lfn entry (%s) with intervening erased entries\n", filename); + *puni = 0; + dprintf("lfn entry (%s) with intervening erased entries\n", + uni); start_index = 0xffff; } DPRINTF(2, ("entry erased, skipping...\n")); @@ -261,7 +264,8 @@ get_next_dirent(nspace *vol, vnode *dir, struct diri *iter, ino_t *vnid, } } - DPRINTF(2, ("get_next_dirent: found %s (vnid %Lx)\n", filename, *vnid)); + DPRINTF(2, ("get_next_dirent: found %s (vnid %Lx)\n", filename, + vnid != NULL ? *vnid : NULL)); return B_NO_ERROR; }