diff options
author | Yang Tse <yangsita@gmail.com> | 2011-08-31 18:15:29 +0200 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2011-08-31 18:15:29 +0200 |
commit | 5ea65fbc79815cc9223ddb13e6d9e6ab148d090c (patch) | |
tree | e694b86e8711f5d393dc191ece9f958bda961b76 /lib | |
parent | 0b018a0a053cf888014edc66b5042d3eb2694571 (diff) |
ssh.c: fix realloc() OOM handling
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ssh.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -644,6 +644,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) const char *fingerprint; #endif /* CURL_LIBSSH2_DEBUG */ const char *host_public_key_md5; + char *new_readdir_line; int rc = LIBSSH2_ERROR_NONE, i; int err; int seekerr = CURL_SEEKFUNC_OK; @@ -1859,10 +1860,13 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) } Curl_safefree(sshc->readdir_linkPath); sshc->readdir_linkPath = NULL; - sshc->readdir_line = realloc(sshc->readdir_line, - sshc->readdir_totalLen + 4 + - sshc->readdir_len); - if(!sshc->readdir_line) { + + new_readdir_line = realloc(sshc->readdir_line, + sshc->readdir_totalLen + 4 + + sshc->readdir_len); + if(!new_readdir_line) { + Curl_safefree(sshc->readdir_line); + sshc->readdir_line = NULL; Curl_safefree(sshc->readdir_filename); sshc->readdir_filename = NULL; Curl_safefree(sshc->readdir_longentry); @@ -1871,6 +1875,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) sshc->actualcode = CURLE_OUT_OF_MEMORY; break; } + sshc->readdir_line = new_readdir_line; sshc->readdir_currLen += snprintf(sshc->readdir_line + sshc->readdir_currLen, |