OSDN Git Service

openssh-7.1p2
[android-x86/external-openssh.git] / sftp-client.c
index 80f4805..5dbeb47 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp-client.c,v 1.117 2015/01/20 23:14:00 deraadt Exp $ */
+/* $OpenBSD: sftp-client.c,v 1.120 2015/05/28 04:50:53 djm Exp $ */
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
  *
@@ -408,6 +408,7 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests,
                error("Invalid packet back from SSH2_FXP_INIT (type %u)",
                    type);
                sshbuf_free(msg);
+               free(ret);
                return(NULL);
        }
        if ((r = sshbuf_get_u32(msg, &ret->version)) != 0)
@@ -621,7 +622,7 @@ do_lsreaddir(struct sftp_conn *conn, const char *path, int print_flag,
                                error("Server sent suspect path \"%s\" "
                                    "during readdir of \"%s\"", filename, path);
                        } else if (dir) {
-                               *dir = xrealloc(*dir, ents + 2, sizeof(**dir));
+                               *dir = xreallocarray(*dir, ents + 2, sizeof(**dir));
                                (*dir)[ents] = xcalloc(1, sizeof(***dir));
                                (*dir)[ents]->filename = xstrdup(filename);
                                (*dir)[ents]->longname = xstrdup(longname);
@@ -1384,7 +1385,9 @@ do_download(struct sftp_conn *conn, const char *remote_path,
                            "server reordered requests", local_path);
                }
                debug("truncating at %llu", (unsigned long long)highwater);
-               ftruncate(local_fd, highwater);
+               if (ftruncate(local_fd, highwater) == -1)
+                       error("ftruncate \"%s\": %s", local_path,
+                           strerror(errno));
        }
        if (read_error) {
                error("Couldn't read from remote file \"%s\" : %s",