From f75849857ebe185ef8e7cb30f4cf88d1dc5d2067 Mon Sep 17 00:00:00 2001 From: isciurus <isciurus@gmail.com> Date: Mon, 6 May 2019 07:36:05 -0700 Subject: [PATCH] Using nextents to determine the format of a directory inode instead of inode size --- tsk/fs/xfs.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tsk/fs/xfs.cpp b/tsk/fs/xfs.cpp index fda17a834..e6cae7048 100644 --- a/tsk/fs/xfs.cpp +++ b/tsk/fs/xfs.cpp @@ -2622,8 +2622,17 @@ xfs_dir_open_meta(TSK_FS_INFO * a_fs, TSK_FS_DIR ** a_fs_dir, if (tsk_verbose) { tsk_fprintf(stderr, "nextents == %" PRId64 ", fs_meta->size = %" PRId64 " \n", nextents, fs_meta->size); } - if (fs_meta->size <= xfs->fs_info.block_size /* nextents can be used too */) + if (nextents == 0) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_FS_ARG); + tsk_error_set_errstr + ("xfs_dir_open_meta: fs_meta->nextents is 0 for TSK_FS_META_CONTENT_TYPE_XFS_EXTENTS type"); + return TSK_ERR; + } else if (nextents == 1) + { + // parsing "block directory" format + // unpack extent xfs_bmbt_irec_t irec; memset(&irec, 0, sizeof(irec)); @@ -2816,6 +2825,8 @@ xfs_dir_open_meta(TSK_FS_INFO * a_fs, TSK_FS_DIR ** a_fs_dir, } else { + // parsing "leaf direcory" and "node directory" formats + for(uint32_t extent_num = 0; extent_num < nextents; extent_num++) { // unpack extent -- GitLab