From e49a93abda978c42771b7055d6a3134cf052952a Mon Sep 17 00:00:00 2001 From: Tim Ruehsen Date: Mon, 16 Mar 2015 21:12:22 +0100 Subject: [PATCH 1/2] src/ftp.c: make sure warc_tmp becomes closed before return Reported-by: Coverity bug #1188044 --- src/ftp.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ftp.c b/src/ftp.c index 5a1d38b..1902242 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -1696,7 +1696,7 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con, char **local_fi case UNLINKERR: case WARC_TMP_FWRITEERR: /* Fatal errors, give up. */ if (warc_tmp != NULL) - fclose (warc_tmp); + fclose (warc_tmp); return err; case CONSOCKERR: case CONERROR: case FTPSRVERR: case FTPRERR: case WRITEFAILED: case FTPUNKNOWNTYPE: case FTPSYSERR: @@ -1771,10 +1771,12 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con, char **local_fi warc_res = warc_write_resource_record (NULL, u->url, NULL, NULL, warc_ip, NULL, warc_tmp, -1); + if (! warc_res) return WARC_ERR; /* warc_write_resource_record has also closed warc_tmp. */ + warc_tmp = NULL; } if (con->cmd & DO_LIST) @@ -1821,6 +1823,9 @@ Removing file due to --delete-after in ftp_loop_internal():\n")); if (local_file) *local_file = xstrdup (locf); + if (warc_tmp != NULL) + fclose (warc_tmp); + return RETROK; } while (!opt.ntry || (count < opt.ntry)); @@ -1829,6 +1834,10 @@ Removing file due to --delete-after in ftp_loop_internal():\n")); fd_close (con->csock); con->csock = -1; } + + if (warc_tmp != NULL) + fclose (warc_tmp); + return TRYLIMEXC; } -- 2.1.4