isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit df29c592d1249b5f1c6eb69dca6684100f1f098b
parent dec5f73f577a5e320b6044b1488d64816546d3bf
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Sat, 12 Apr 2014 12:46:36 +0200

close a bunch of fd leaks in error paths

found by coverity.

Diffstat:
Msrc/drv_maildir.c | 9+++++++--
Msrc/mdconvert.c | 5++++-
2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/drv_maildir.c b/src/drv_maildir.c @@ -219,8 +219,10 @@ maildir_list_recurse( store_t *gctx, int isBox, int *flags, const char *inbox, const char *ent = de->d_name; pl = pathLen + nfsnprintf( path + pathLen, _POSIX_PATH_MAX - pathLen, "%s", ent ); if (inbox && !memcmp( path, inbox, pl ) && !inbox[pl]) { - if (maildir_list_inbox( gctx, flags ) < 0) + if (maildir_list_inbox( gctx, flags ) < 0) { + closedir( dir ); return -1; + } } else { if (*ent == '.') { if (!isBox) @@ -238,8 +240,10 @@ maildir_list_recurse( store_t *gctx, int isBox, int *flags, const char *inbox, } } nl = nameLen + nfsnprintf( name + nameLen, _POSIX_PATH_MAX - nameLen, "%s", ent ); - if (maildir_list_recurse( gctx, 1, flags, inbox, path, pl, name, nl ) < 0) + if (maildir_list_recurse( gctx, 1, flags, inbox, path, pl, name, nl ) < 0) { + closedir( dir ); return -1; + } } } closedir (dir); @@ -677,6 +681,7 @@ maildir_scan( maildir_store_t *ctx, msglist_t *msglist ) ctx->db->err( ctx->db, ret, "Maildir error: db->get()" ); mbork: maildir_free_scan( msglist ); + closedir( d ); goto bork; } uid = INT_MAX; diff --git a/src/mdconvert.c b/src/mdconvert.c @@ -208,8 +208,10 @@ convert( const char *box, int altmap ) nfsnprintf( buf2 + bl, sizeof(buf2) - bl, "%.*s,U=%d%s", ml, e->d_name, uid, ru ); } if (rename( buf, buf2 )) { - if (errno == ENOENT) + if (errno == ENOENT) { + closedir( d ); goto again; + } sys_error( "Cannot rename %s to %s", buf, buf2 ); ebork: closedir( d ); @@ -224,6 +226,7 @@ convert( const char *box, int altmap ) close( dfd ); if (rename( tdpath, dpath )) { sys_error( "Cannot rename %s to %s", tdpath, dpath ); + close( sfd ); return 1; } if (unlink( spath ))