]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
libssh2: setting atime or mtime >32bit on 4-bytes-long systems
authorDaniel Stenberg <daniel@haxx.se>
Tue, 16 Aug 2022 14:29:15 +0000 (16:29 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 16 Aug 2022 21:16:53 +0000 (23:16 +0200)
Since the libssh2 API uses 'long' to store the timestamp, it cannot
transfer >32bit times on Windows and 32bit architecture builds.

Avoid nasty surprises by instead not setting such time.

Spotted by Coverity

Closes #9325

lib/vssh/libssh2.c

index 2026a88e5d0fdbbd25b5e639cb73b07008671ef3..9fd71b4f745e27be210eae3a16dea2b40c359f0b 100644 (file)
@@ -1766,8 +1766,15 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
           sshc->actualcode = CURLE_QUOTE_ERROR;
           break;
         }
-        sshp->quote_attrs.atime = (unsigned long)date;
-        sshp->quote_attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
+#if SIZEOF_TIME_T > SIZEOF_LONG
+        if(date > 0xffffffff)
+          ;
+        else
+#endif
+        {
+          sshp->quote_attrs.atime = (unsigned long)date;
+          sshp->quote_attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
+        }
       }
       else if(strncasecompare(cmd, "mtime", 5)) {
         time_t date = Curl_getdate_capped(sshc->quote_path1);
@@ -1780,8 +1787,15 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
           sshc->actualcode = CURLE_QUOTE_ERROR;
           break;
         }
-        sshp->quote_attrs.mtime = (unsigned long)date;
-        sshp->quote_attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
+#if SIZEOF_TIME_T > SIZEOF_LONG
+        if(date > 0xffffffff)
+          ;
+        else
+#endif
+        {
+          sshp->quote_attrs.mtime = (unsigned long)date;
+          sshp->quote_attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
+        }
       }
 
       /* Now send the completed structure... */