mirror of https://github.com/vitalif/e2fsprogs
Fix memory leaks from using the tdb library
We weren't freeing allocated memory from calls to tdb_fetch, tdb_firstkey, and tdb_nextkey. Oops. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>bitmap-optimize
parent
25a9fe2894
commit
a1f642728f
|
@ -205,6 +205,7 @@ static struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino)
|
|||
#ifdef DIRINFO_DEBUG
|
||||
printf("(%d,%d,%d)\n", ino, buf->dotdot, buf->parent);
|
||||
#endif
|
||||
free(data.dptr);
|
||||
return &ret_dir_info;
|
||||
}
|
||||
|
||||
|
@ -324,6 +325,8 @@ extern struct dir_info_iter *e2fsck_dir_info_iter_begin(e2fsck_t ctx)
|
|||
extern void e2fsck_dir_info_iter_end(e2fsck_t ctx,
|
||||
struct dir_info_iter *iter)
|
||||
{
|
||||
if (iter->tdb_iter.dptr)
|
||||
free(iter->tdb_iter.dptr);
|
||||
ext2fs_free_mem(&iter);
|
||||
}
|
||||
|
||||
|
@ -332,7 +335,7 @@ extern void e2fsck_dir_info_iter_end(e2fsck_t ctx,
|
|||
*/
|
||||
struct dir_info *e2fsck_dir_info_iter(e2fsck_t ctx, struct dir_info_iter *iter)
|
||||
{
|
||||
TDB_DATA data;
|
||||
TDB_DATA data, key;
|
||||
struct dir_info_db *db = ctx->dir_info;
|
||||
struct dir_info_ent *buf;
|
||||
static struct dir_info ret_dir_info;
|
||||
|
@ -343,7 +346,8 @@ struct dir_info *e2fsck_dir_info_iter(e2fsck_t ctx, struct dir_info_iter *iter)
|
|||
if (db->tdb) {
|
||||
if (iter->tdb_iter.dptr == 0)
|
||||
return 0;
|
||||
data = tdb_fetch(db->tdb, iter->tdb_iter);
|
||||
key = iter->tdb_iter;
|
||||
data = tdb_fetch(db->tdb, key);
|
||||
if (!data.dptr) {
|
||||
printf("iter fetch failed: %s\n",
|
||||
tdb_errorstr(db->tdb));
|
||||
|
@ -353,7 +357,9 @@ struct dir_info *e2fsck_dir_info_iter(e2fsck_t ctx, struct dir_info_iter *iter)
|
|||
ret_dir_info.ino = *((ext2_ino_t *) iter->tdb_iter.dptr);
|
||||
ret_dir_info.dotdot = buf->dotdot;
|
||||
ret_dir_info.parent = buf->parent;
|
||||
iter->tdb_iter = tdb_nextkey(db->tdb, iter->tdb_iter);
|
||||
iter->tdb_iter = tdb_nextkey(db->tdb, key);
|
||||
free(key.dptr);
|
||||
free(data.dptr);
|
||||
return &ret_dir_info;
|
||||
}
|
||||
|
||||
|
|
|
@ -444,6 +444,7 @@ static errcode_t get_inode_count(ext2_icount_t icount, ext2_ino_t ino,
|
|||
}
|
||||
|
||||
*count = *((__u16 *) data.dptr);
|
||||
free(data.dptr);
|
||||
return 0;
|
||||
}
|
||||
el = get_icount_el(icount, ino, 0);
|
||||
|
|
Loading…
Reference in New Issue