From 84605fd3d74efb907fba9863f2a3c3b20726bcd0 Mon Sep 17 00:00:00 2001 From: jpandre Date: Fri, 18 Sep 2009 16:15:36 +0000 Subject: [PATCH] Fixed a possible memory leak when setting a DOS name --- libntfs-3g/dir.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/libntfs-3g/dir.c b/libntfs-3g/dir.c index ec44ab4a..de07f8ef 100644 --- a/libntfs-3g/dir.c +++ b/libntfs-3g/dir.c @@ -2066,22 +2066,27 @@ static int set_dos_name(ntfs_inode *ni, ntfs_inode *dir_ni, if (!ntfs_link_i(ni, dir_ni, shortname, shortlen, FILE_NAME_DOS) /* make sure a new link was recorded */ - && (le16_to_cpu(ni->mrec->link_count) > linkcount) + && (le16_to_cpu(ni->mrec->link_count) > linkcount)) { /* delete the existing long name or short name */ - && !ntfs_delete(vol, fullpath, ni, dir_ni, - deletename, deletelen)) { + if (!ntfs_delete(vol, fullpath, ni, dir_ni, + deletename, deletelen)) { /* delete closes the inodes, so have to open again */ - dir_ni = ntfs_inode_open(vol, dnum); - if (dir_ni) { - ni = ntfs_inode_open(vol, fnum); - if (ni) { - if (!ntfs_link_i(ni, dir_ni, longname, - longlen, FILE_NAME_WIN32)) - res = 0; - ntfs_inode_close(ni); + dir_ni = ntfs_inode_open(vol, dnum); + if (dir_ni) { + ni = ntfs_inode_open(vol, fnum); + if (ni) { + if (!ntfs_link_i(ni, dir_ni, + longname, longlen, + FILE_NAME_WIN32)) + res = 0; + ntfs_inode_close(ni); + } + ntfs_inode_close(dir_ni); } - ntfs_inode_close(dir_ni); } + } else { + ntfs_inode_close(ni); + ntfs_inode_close(dir_ni); } return (res); }