diff options
author | Daniel Stenberg <daniel@haxx.se> | 2018-12-21 14:22:42 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2018-12-22 18:10:39 +0100 |
commit | d18a5afaf07fdc093c6a6131cc7926a3d5a55407 (patch) | |
tree | 9fd638489ba4c4c7a4364e3f69ac3de8dba4be77 /lib | |
parent | 207e7cfa98c35c9d40193ef83bba1d7a830bf141 (diff) |
libssh: free sftp_canonicalize_path() data correctly
Assisted-by: Harry Sintonen
Fixes #3402
Closes #3403
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ssh-libssh.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/ssh-libssh.c b/lib/ssh-libssh.c index e38c01ac7..2e920f0e9 100644 --- a/lib/ssh-libssh.c +++ b/lib/ssh-libssh.c @@ -95,6 +95,13 @@ #include "memdebug.h" #include "curl_path.h" +/* A recent macro provided by libssh. Or make our own. */ +#ifndef SSH_STRING_FREE_CHAR +/* !checksrc! disable ASSIGNWITHINCONDITION 1 */ +#define SSH_STRING_FREE_CHAR(x) \ + do { if((x) != NULL) { ssh_string_free_char(x); x = NULL; } } while(0) +#endif + /* Local functions: */ static CURLcode myssh_connect(struct connectdata *conn, bool *done); static CURLcode myssh_multi_statemach(struct connectdata *conn, @@ -1661,7 +1668,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block) sshc->sftp_session = NULL; } - Curl_safefree(sshc->homedir); + SSH_STRING_FREE_CHAR(sshc->homedir); conn->data->state.most_recent_ftp_entrypath = NULL; state(conn, SSH_SESSION_DISCONNECT); @@ -1829,7 +1836,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block) ssh_disconnect(sshc->ssh_session); - Curl_safefree(sshc->homedir); + SSH_STRING_FREE_CHAR(sshc->homedir); conn->data->state.most_recent_ftp_entrypath = NULL; state(conn, SSH_SESSION_FREE); @@ -1866,14 +1873,11 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block) Curl_safefree(sshc->rsa_pub); Curl_safefree(sshc->rsa); - Curl_safefree(sshc->quote_path1); Curl_safefree(sshc->quote_path2); - - Curl_safefree(sshc->homedir); - Curl_safefree(sshc->readdir_line); Curl_safefree(sshc->readdir_linkPath); + SSH_STRING_FREE_CHAR(sshc->homedir); /* the code we are about to return */ result = sshc->actualcode; |