diff options
author | djm@openbsd.org <djm@openbsd.org> | 2018-07-31 03:07:24 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2018-07-31 13:13:26 +1000 |
commit | 1a66079c0669813306cc69e5776a4acd9fb49015 (patch) | |
tree | 892eb2fcddac9189cc1d8e7a9b821bde27ba1014 /sftp-client.c | |
parent | 87f08be054b7eeadbb9cdeb3fb4872be79ccf218 (diff) |
upstream: fix some memory leaks spotted by Coverity via Jakub Jelen
in bz#2366 feedback and ok dtucker@
OpenBSD-Commit-ID: 8402bbae67d578bedbadb0ce68ff7c5a136ef563
Diffstat (limited to 'sftp-client.c')
-rw-r--r-- | sftp-client.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/sftp-client.c b/sftp-client.c index dc4d8c4e0..4986d6d8d 100644 --- a/sftp-client.c +++ b/sftp-client.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sftp-client.c,v 1.129 2018/05/25 04:25:46 djm Exp $ */ | 1 | /* $OpenBSD: sftp-client.c,v 1.130 2018/07/31 03:07:24 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> | 3 | * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> |
4 | * | 4 | * |
@@ -1461,7 +1461,7 @@ download_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, | |||
1461 | { | 1461 | { |
1462 | int i, ret = 0; | 1462 | int i, ret = 0; |
1463 | SFTP_DIRENT **dir_entries; | 1463 | SFTP_DIRENT **dir_entries; |
1464 | char *filename, *new_src, *new_dst; | 1464 | char *filename, *new_src = NULL, *new_dst = NULL; |
1465 | mode_t mode = 0777; | 1465 | mode_t mode = 0777; |
1466 | 1466 | ||
1467 | if (depth >= MAX_DIR_DEPTH) { | 1467 | if (depth >= MAX_DIR_DEPTH) { |
@@ -1499,8 +1499,10 @@ download_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, | |||
1499 | } | 1499 | } |
1500 | 1500 | ||
1501 | for (i = 0; dir_entries[i] != NULL && !interrupted; i++) { | 1501 | for (i = 0; dir_entries[i] != NULL && !interrupted; i++) { |
1502 | filename = dir_entries[i]->filename; | 1502 | free(new_dst); |
1503 | free(new_src); | ||
1503 | 1504 | ||
1505 | filename = dir_entries[i]->filename; | ||
1504 | new_dst = path_append(dst, filename); | 1506 | new_dst = path_append(dst, filename); |
1505 | new_src = path_append(src, filename); | 1507 | new_src = path_append(src, filename); |
1506 | 1508 | ||
@@ -1523,9 +1525,9 @@ download_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, | |||
1523 | } else | 1525 | } else |
1524 | logit("%s: not a regular file\n", new_src); | 1526 | logit("%s: not a regular file\n", new_src); |
1525 | 1527 | ||
1526 | free(new_dst); | ||
1527 | free(new_src); | ||
1528 | } | 1528 | } |
1529 | free(new_dst); | ||
1530 | free(new_src); | ||
1529 | 1531 | ||
1530 | if (preserve_flag) { | 1532 | if (preserve_flag) { |
1531 | if (dirattrib->flags & SSH2_FILEXFER_ATTR_ACMODTIME) { | 1533 | if (dirattrib->flags & SSH2_FILEXFER_ATTR_ACMODTIME) { |
@@ -1793,7 +1795,7 @@ upload_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, | |||
1793 | int ret = 0; | 1795 | int ret = 0; |
1794 | DIR *dirp; | 1796 | DIR *dirp; |
1795 | struct dirent *dp; | 1797 | struct dirent *dp; |
1796 | char *filename, *new_src, *new_dst; | 1798 | char *filename, *new_src = NULL, *new_dst = NULL; |
1797 | struct stat sb; | 1799 | struct stat sb; |
1798 | Attrib a, *dirattrib; | 1800 | Attrib a, *dirattrib; |
1799 | 1801 | ||
@@ -1844,6 +1846,8 @@ upload_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, | |||
1844 | while (((dp = readdir(dirp)) != NULL) && !interrupted) { | 1846 | while (((dp = readdir(dirp)) != NULL) && !interrupted) { |
1845 | if (dp->d_ino == 0) | 1847 | if (dp->d_ino == 0) |
1846 | continue; | 1848 | continue; |
1849 | free(new_dst); | ||
1850 | free(new_src); | ||
1847 | filename = dp->d_name; | 1851 | filename = dp->d_name; |
1848 | new_dst = path_append(dst, filename); | 1852 | new_dst = path_append(dst, filename); |
1849 | new_src = path_append(src, filename); | 1853 | new_src = path_append(src, filename); |
@@ -1870,9 +1874,9 @@ upload_dir_internal(struct sftp_conn *conn, const char *src, const char *dst, | |||
1870 | } | 1874 | } |
1871 | } else | 1875 | } else |
1872 | logit("%s: not a regular file\n", filename); | 1876 | logit("%s: not a regular file\n", filename); |
1873 | free(new_dst); | ||
1874 | free(new_src); | ||
1875 | } | 1877 | } |
1878 | free(new_dst); | ||
1879 | free(new_src); | ||
1876 | 1880 | ||
1877 | do_setstat(conn, dst, &a); | 1881 | do_setstat(conn, dst, &a); |
1878 | 1882 | ||