]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
libssh2: use the filename buffer when getting the homedir
authorDaniel Stenberg <daniel@haxx.se>
Tue, 15 Oct 2024 22:17:24 +0000 (00:17 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 16 Oct 2024 09:55:52 +0000 (11:55 +0200)
Avoids having to use a big stack buffer for this.

Closes #15285

lib/vssh/libssh2.c

index 505adc4456e41e0badcadd223a056d9fc9dd85c2..e0b9487bef192301e9bca9ac9f9a51a4ddb7df8f 100644 (file)
@@ -2046,21 +2046,18 @@ static CURLcode ssh_statemachine(struct Curl_easy *data, bool *block)
       break;
 
     case SSH_SFTP_REALPATH:
-    {
-      char tempHome[CURL_PATH_MAX];
-
       /*
        * Get the "home" directory
        */
       rc = sftp_libssh2_realpath(sshc->sftp_session, ".",
-                                 tempHome, CURL_PATH_MAX-1);
+                                 sshp->readdir_filename, CURL_PATH_MAX);
       if(rc == LIBSSH2_ERROR_EAGAIN) {
         break;
       }
       if(rc > 0) {
         /* It seems that this string is not always NULL terminated */
-        tempHome[rc] = '\0';
-        sshc->homedir = strdup(tempHome);
+        sshp->readdir_filename[rc] = '\0';
+        sshc->homedir = strdup(sshp->readdir_filename);
         if(!sshc->homedir) {
           state(data, SSH_SFTP_CLOSE);
           sshc->actualcode = CURLE_OUT_OF_MEMORY;
@@ -2083,7 +2080,7 @@ static CURLcode ssh_statemachine(struct Curl_easy *data, bool *block)
         state(data, SSH_STOP);
         break;
       }
-    }
+
     /* This is the last step in the SFTP connect phase. Do note that while
        we get the homedir here, we get the "workingpath" in the DO action
        since the homedir will remain the same between request but the