]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
libssh: fix readdir issues
authorEshan Kelkar <eshankelkar@galorithm.com>
Tue, 8 Jul 2025 07:12:29 +0000 (12:42 +0530)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 8 Jul 2025 10:43:09 +0000 (12:43 +0200)
Signed-off-by: Eshan Kelkar <eshankelkar@galorithm.com>
Closes #17856

lib/vssh/libssh.c

index 4a272e45354d43f3b23681ea9cedf418741060e7..3bae943c7cebfe44fa5deec9ecd1616f9e9a48f0 100644 (file)
@@ -648,7 +648,7 @@ static int myssh_in_SFTP_READDIR(struct Curl_easy *data,
     myssh_to(data, sshc, SSH_SFTP_READDIR_DONE);
   }
   else {
-    failf(data, "Could not open remote file for reading: %s",
+    failf(data, "Could not open remote directory for reading: %s",
           ssh_get_error(sshc->ssh_session));
     return myssh_to_SFTP_CLOSE(data, sshc);
   }
@@ -663,7 +663,7 @@ static int myssh_in_SFTP_READDIR_LINK(struct Curl_easy *data,
 
   sshc->readdir_link_attrs = sftp_lstat(sshc->sftp_session,
                                         sshc->readdir_linkPath);
-  if(sshc->readdir_link_attrs == 0) {
+  if(!sshc->readdir_link_attrs) {
     failf(data, "Could not read symlink for reading: %s",
           ssh_get_error(sshc->ssh_session));
     return myssh_to_SFTP_CLOSE(data, sshc);
@@ -672,7 +672,7 @@ static int myssh_in_SFTP_READDIR_LINK(struct Curl_easy *data,
   if(!sshc->readdir_link_attrs->name) {
     sshc->readdir_tmp = sftp_readlink(sshc->sftp_session,
                                       sshc->readdir_linkPath);
-    if(!sshc->readdir_filename)
+    if(!sshc->readdir_tmp)
       sshc->readdir_len = 0;
     else
       sshc->readdir_len = strlen(sshc->readdir_tmp);
@@ -689,6 +689,14 @@ static int myssh_in_SFTP_READDIR_LINK(struct Curl_easy *data,
 
   if(curlx_dyn_addf(&sshc->readdir_buf, " -> %s",
                     sshc->readdir_filename)) {
+    /* Not using:
+     * return myssh_to_SFTP_CLOSE(data, sshc);
+     *
+     * as that assumes an sftp related error while
+     * assigning sshc->actualcode whereas the current
+     * error is curlx_dyn_addf() related.
+     */
+    myssh_to(data, sshc, SSH_SFTP_CLOSE);
     sshc->actualcode = CURLE_OUT_OF_MEMORY;
     return SSH_ERROR;
   }