From b19215d1ed4e6b98371336f5a56a8412d4f35c3f Mon Sep 17 00:00:00 2001 From: "cantab.net!aia21" Date: Thu, 22 Jan 2004 23:53:36 +0000 Subject: [PATCH] Fix memory leaks in ntfs_readdir() and ntfs_inode_lookup_by_name(). Thanks to Christophe Grenier who used Valgrind to find them. (Logical change 1.272) --- libntfs/dir.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libntfs/dir.c b/libntfs/dir.c index 11fe50d1..83897179 100644 --- a/libntfs/dir.c +++ b/libntfs/dir.c @@ -238,6 +238,7 @@ found_it: ia = (INDEX_ALLOCATION*)malloc(index_block_size); if (!ia) { Dperror("Failed to allocate buffer for index block"); + ntfs_attr_close(ia_na); goto put_err_out; } @@ -335,6 +336,7 @@ found_it2: * about having matched imperfectly before. */ mref = le64_to_cpu(ie->indexed_file); + free(ia); ntfs_attr_close(ia_na); ntfs_attr_put_search_ctx(ctx); return mref; @@ -422,6 +424,7 @@ found_it2: errno = EIO; goto close_err_out; } + free(ia); ntfs_attr_close(ia_na); ntfs_attr_put_search_ctx(ctx); /* @@ -599,10 +602,10 @@ int ntfs_readdir(ntfs_inode *dir_ni, s64 *pos, ntfs_volume *vol; ntfs_attr *ia_na, *bmp_na = NULL; ntfs_attr_search_ctx *ctx = NULL; - u8 *index_end, *bmp; + u8 *index_end, *bmp = NULL; INDEX_ROOT *ir; INDEX_ENTRY *ie; - INDEX_ALLOCATION *ia; + INDEX_ALLOCATION *ia = NULL; int rc, ir_pos, bmp_buf_size, bmp_buf_pos, eo; u32 index_block_size, index_vcn_size; u8 index_block_size_bits, index_vcn_size_bits; @@ -901,6 +904,10 @@ EOD: /* We are finished, set *pos to EOD. */ *pos = i_size + vol->mft_record_size; done: + if (ia) + free(ia); + if (bmp) + free(bmp); if (bmp_na) ntfs_attr_close(bmp_na); if (ia_na) @@ -920,6 +927,10 @@ err_out: Dprintf("%s() failed.\n", __FUNCTION__); if (ctx) ntfs_attr_put_search_ctx(ctx); + if (ia) + free(ia); + if (bmp) + free(bmp); if (bmp_na) ntfs_attr_close(bmp_na); if (ia_na)