]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
libssh: make atime/mtime date overflow return error
authorDaniel Stenberg <daniel@haxx.se>
Wed, 17 Aug 2022 08:51:07 +0000 (10:51 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 17 Aug 2022 22:02:09 +0000 (00:02 +0200)
Closes #9328

lib/vssh/libssh.c

index c2f71d030541709892bc413911dca76e7755963a..e0d9d71ae64515a94a3bca0704a87c4860a72775 100644 (file)
@@ -2911,47 +2911,34 @@ static void sftp_quote_stat(struct Curl_easy *data)
     }
     sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_UIDGID;
   }
-  else if(strncasecompare(cmd, "atime", 5)) {
+  else if(strncasecompare(cmd, "atime", 5) ||
+          strncasecompare(cmd, "mtime", 5)) {
     time_t date = Curl_getdate_capped(sshc->quote_path1);
+    bool fail = FALSE;
     if(date == -1) {
-      Curl_safefree(sshc->quote_path1);
-      Curl_safefree(sshc->quote_path2);
-      failf(data, "Syntax error: incorrect access date format");
-      state(data, SSH_SFTP_CLOSE);
-      sshc->nextstate = SSH_NO_STATE;
-      sshc->actualcode = CURLE_QUOTE_ERROR;
-      return;
+      failf(data, "incorrect date format for %.*s", 5, cmd);
+      fail = TRUE;
     }
 #if SIZEOF_TIME_T > 4
-    if(date > 0xffffffff)
-      ; /* avoid setting a capped time */
-    else
-#endif
-    {
-      sshc->quote_attrs->atime = (uint32_t)date;
-      sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_ACMODTIME;
+    else if(date > 0xffffffff) {
+      failf(data, "date overflow");
+      fail = TRUE; /* avoid setting a capped time */
     }
-  }
-  else if(strncasecompare(cmd, "mtime", 5)) {
-    time_t date = Curl_getdate_capped(sshc->quote_path1);
-    if(date == -1) {
+#endif
+    if(fail) {
       Curl_safefree(sshc->quote_path1);
       Curl_safefree(sshc->quote_path2);
-      failf(data, "Syntax error: incorrect modification date format");
       state(data, SSH_SFTP_CLOSE);
       sshc->nextstate = SSH_NO_STATE;
       sshc->actualcode = CURLE_QUOTE_ERROR;
       return;
     }
-#if SIZEOF_TIME_T > 4
-    if(date > 0xffffffff)
-      ; /* avoid setting a capped time */
-    else
-#endif
-    {
+    if(strncasecompare(cmd, "atime", 5))
+      sshc->quote_attrs->atime = (uint32_t)date;
+    else /* mtime */
       sshc->quote_attrs->mtime = (uint32_t)date;
-      sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_ACMODTIME;
-    }
+
+    sshc->quote_attrs->flags |= SSH_FILEXFER_ATTR_ACMODTIME;
   }
 
   /* Now send the completed structure... */