diff --git a/tsk/fs/xfs.c b/tsk/fs/xfs.c index dd6ed6b6510307b96aa5eeb229907060b9fa6bf0..aed1e13795d1299a7e40ff6e4aa23a75fcb85525 100644 --- a/tsk/fs/xfs.c +++ b/tsk/fs/xfs.c @@ -1351,6 +1351,17 @@ xfs_block_getflags(TSK_FS_INFO * a_fs, TSK_DADDR_T a_addr) (TSK_OFF_T) sb->sb_blocksize * cur_sblock_num + sizeof(xfs_btree_sblock_t), (char *) recs, len); + if (cnt != len) { + if (cnt >= 0) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_FS_READ); + } + tsk_error_set_errstr2("xfs_block_getflags: xfs_agf, cnt = %" PRId64 ", len = %" PRId64 "", cnt, len); + free(agf); + free(agfl); + free(cur_btree_sblock); + return (TSK_FS_BLOCK_FLAG_ENUM) NULL; + } // iterate over the keys found = 0; @@ -1809,7 +1820,8 @@ parse_extended_attrs(XFSFS_INFO *a_xfsfs, xfs_dinode_t *a_dino_buf, FILE *a_hFil xfs_attr_sf_entry_t *sf_entry = (xfs_attr_sf_entry_t*) (in_base + in_offset); uint64_t limit = a_xfsfs->inode_size; - for (uint8_t entry_num = 0; entry_num < attr_hdr->count && in_offset < limit; entry_num++) + uint8_t entry_num; + for (entry_num = 0; entry_num < attr_hdr->count && in_offset < limit; entry_num++) { uint64_t sf_entry_size = ATTR_SF_ENTRY_SIZE + sf_entry->namelen + sf_entry->valuelen; @@ -2423,7 +2435,8 @@ visit_btree_node( } // iterate over the keys - for(uint32_t cur_key = 0; cur_key < bb_numrecs; cur_key++) + uint32_t cur_key; + for(cur_key = 0; cur_key < bb_numrecs; cur_key++) { // unpack extent xfs_bmbt_irec_t irec;