diff options
| author | Dan Fandrich <dan@coneharvesters.com> | 2007-03-15 21:25:56 +0000 | 
|---|---|---|
| committer | Dan Fandrich <dan@coneharvesters.com> | 2007-03-15 21:25:56 +0000 | 
| commit | 9189ac1141de4c9f8d61fadfb1a435b0b9436d18 (patch) | |
| tree | dee1b310fdb55fe7f7e99a6eeb838426f6623ad4 /lib | |
| parent | 5c7c79bd082c81266b11756eb8b6c7f897c967ac (diff) | |
Fixed some memory leaks in various error paths.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/ssh.c | 20 | 
1 files changed, 18 insertions, 2 deletions
@@ -307,6 +307,7 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)    if (ssh->ssh_session == NULL) {      failf(data, "Failure initialising ssh session\n");      Curl_safefree(ssh->path); +    Curl_safefree(working_path);      return CURLE_FAILED_INIT;    }  #ifdef CURL_LIBSSH2_DEBUG @@ -318,6 +319,7 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)      libssh2_session_free(ssh->ssh_session);      ssh->ssh_session = NULL;      Curl_safefree(ssh->path); +    Curl_safefree(working_path);      return CURLE_FAILED_INIT;    } @@ -356,6 +358,7 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)      libssh2_session_free(ssh->ssh_session);      ssh->ssh_session = NULL;      Curl_safefree(ssh->path); +    Curl_safefree(working_path);      return CURLE_OUT_OF_MEMORY;    }    infof(data, "SSH authentication methods available: %s\n", authlist); @@ -424,6 +427,7 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)      libssh2_session_free(ssh->ssh_session);      ssh->ssh_session = NULL;      Curl_safefree(ssh->path); +    Curl_safefree(working_path);      return CURLE_FAILED_INIT;    } @@ -442,6 +446,7 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)        failf(data, "Failure initialising sftp session\n");        libssh2_session_free(ssh->ssh_session);        ssh->ssh_session = NULL; +      Curl_safefree(working_path);        return CURLE_FAILED_INIT;      } @@ -458,6 +463,7 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)          ssh->sftp_session = NULL;          libssh2_session_free(ssh->ssh_session);          ssh->ssh_session = NULL; +        Curl_safefree(working_path);          return CURLE_OUT_OF_MEMORY;        }      } @@ -472,9 +478,11 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)    if (conn->protocol == PROT_SCP) {      real_path = (char *)malloc(working_path_len+1);      if (real_path == NULL) { -      Curl_safefree(working_path); +      libssh2_sftp_shutdown(ssh->sftp_session); +      ssh->sftp_session = NULL;        libssh2_session_free(ssh->ssh_session);        ssh->ssh_session = NULL; +      Curl_safefree(working_path);        return CURLE_OUT_OF_MEMORY;      }      if (working_path[1] == '~') @@ -507,6 +515,8 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)      else {        real_path = (char *)malloc(working_path_len+1);        if (real_path == NULL) { +        libssh2_sftp_shutdown(ssh->sftp_session); +        ssh->sftp_session = NULL;          libssh2_session_free(ssh->ssh_session);          ssh->ssh_session = NULL;          Curl_safefree(working_path); @@ -515,8 +525,14 @@ CURLcode Curl_ssh_connect(struct connectdata *conn, bool *done)        memcpy(real_path, working_path, 1+working_path_len);      }    } -  else +  else { +    libssh2_sftp_shutdown(ssh->sftp_session); +    ssh->sftp_session = NULL; +    libssh2_session_free(ssh->ssh_session); +    ssh->ssh_session = NULL; +    Curl_safefree(working_path);      return CURLE_FAILED_INIT; +  }    Curl_safefree(working_path);    ssh->path = real_path;  | 
