Prevent uploading to a URL that has no file name part.
authorDaniel Stenberg <daniel@haxx.se>
Fri, 3 Mar 2006 13:09:30 +0000 (13:09 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 3 Mar 2006 13:09:30 +0000 (13:09 +0000)
CHANGES
RELEASE-NOTES
lib/ftp.c
tests/data/test524 [new file with mode: 0644]
tests/libtest/Makefile.am
tests/libtest/lib524.c [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 2a9f4a2..37952c8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,11 @@
                                   Changelog
 
 Daniel (2 March 2006)
+- FTP upload without a file name part in the URL now causes
+  curl_easy_perform() to return CURLE_URL_MALFORMAT. Previously it allowed the
+  upload but named the file "(nil)" (without the quotes). Test case 524
+  verifies.
+
 - Added a check for getprotobyname in configure so that it'll be used, thanks
   to Gisle Vanem's change the other day.
 
@@ -15,6 +20,10 @@ Daniel (28 February 2006)
   are out of file handles very early in curl's code where it makes sure that
   0, 1 and 2 aren't gonna be used by the lib for transfers.
 
+Daniel (27 February 2006)
+- Marty Kuhrt pointed out that there were two VMS-specific files missing in
+  the release archive.
+
 Version 7.15.2 (27 February 2006)
 
 Daniel (22 February 2006)
index adef4ab..0110cd5 100644 (file)
@@ -7,7 +7,7 @@ Curl and libcurl 7.15.3
  Number of public functions in libcurl:    46
  Amount of public web site mirrors:        31
  Number of known libcurl bindings:         32
- Number of contributors:                   474
+ Number of contributors:                   487
 
 This release includes the following changes:
 
index 02732f4..da2aeb9 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -3816,6 +3816,13 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
     ftp->file=NULL; /* instead of point to a zero byte, we make it a NULL
                        pointer */
 
+  if(data->set.upload && !ftp->file &&
+     (!ftp->no_transfer || conn->bits.no_body)) {
+    /* We need a file name when uploading. Return error! */
+    failf(data, "Uploading to a URL without a file name!");
+    return CURLE_URL_MALFORMAT;
+  }
+
   ftp->cwddone = FALSE; /* default to not done */
 
   if(ftp->prevpath) {
diff --git a/tests/data/test524 b/tests/data/test524
new file mode 100644 (file)
index 0000000..3694666
--- /dev/null
@@ -0,0 +1,44 @@
+<info>
+<keywords>
+FTP
+UPLOAD
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<tool>
+lib524
+</tool>
+ <name>
+FTP upload with target URL ending with slash
+ </name>
+# first URL then proxy
+ <command>
+ftp://%HOSTIP:%FTPPORT/path/to/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous\r
+PASS curl_by_daniel@haxx.se\r
+PWD\r
+</protocol>
+
+# 3 is CURLE_URL_MALFORMAT
+<errorcode>
+3
+</errorcode>
+</verify>
index ccbe2aa..2af8877 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
 #
 # This software is licensed as described in the file COPYING, which
 # you should have received as part of this distribution. The terms
@@ -40,7 +40,7 @@ SUPPORTFILES = first.c test.h
 # These are all libcurl test programs
 noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \
   lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \
-  lib518 lib519 lib520 lib521 lib523
+  lib518 lib519 lib520 lib521 lib523 lib524
 
 lib500_SOURCES = lib500.c $(SUPPORTFILES)
 lib500_LDADD = $(LIBDIR)/libcurl.la
@@ -133,3 +133,7 @@ lib521_DEPENDENCIES = $(LIBDIR)/libcurl.la
 lib523_SOURCES = lib523.c $(SUPPORTFILES)
 lib523_LDADD = $(LIBDIR)/libcurl.la
 lib523_DEPENDENCIES = $(LIBDIR)/libcurl.la
+
+lib524_SOURCES = lib524.c $(SUPPORTFILES)
+lib524_LDADD = $(LIBDIR)/libcurl.la
+lib524_DEPENDENCIES = $(LIBDIR)/libcurl.la
diff --git a/tests/libtest/lib524.c b/tests/libtest/lib524.c
new file mode 100644 (file)
index 0000000..be9f434
--- /dev/null
@@ -0,0 +1,15 @@
+#include "test.h"
+
+int test(char *URL)
+{
+  CURLcode res;
+  CURL *curl = curl_easy_init();
+  curl_easy_setopt(curl, CURLOPT_URL, URL);
+  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
+  curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE);
+
+  res = curl_easy_perform(curl);
+  curl_easy_cleanup(curl);
+  return (int)res;
+}
+