Prevent uploading to a URL that has no file name part.

This commit is contained in:
Daniel Stenberg 2006-03-03 13:09:30 +00:00
parent aa50a00898
commit 7d68101f83
6 changed files with 82 additions and 3 deletions

View File

@ -7,6 +7,11 @@
Changelog Changelog
Daniel (2 March 2006) 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 - Added a check for getprotobyname in configure so that it'll be used, thanks
to Gisle Vanem's change the other day. 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 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. 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) Version 7.15.2 (27 February 2006)
Daniel (22 February 2006) Daniel (22 February 2006)

View File

@ -7,7 +7,7 @@ Curl and libcurl 7.15.3
Number of public functions in libcurl: 46 Number of public functions in libcurl: 46
Amount of public web site mirrors: 31 Amount of public web site mirrors: 31
Number of known libcurl bindings: 32 Number of known libcurl bindings: 32
Number of contributors: 474 Number of contributors: 487
This release includes the following changes: This release includes the following changes:

View File

@ -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 ftp->file=NULL; /* instead of point to a zero byte, we make it a NULL
pointer */ 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 */ ftp->cwddone = FALSE; /* default to not done */
if(ftp->prevpath) { if(ftp->prevpath) {

44
tests/data/test524 Normal file
View File

@ -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
PASS curl_by_daniel@haxx.se
PWD
</protocol>
# 3 is CURLE_URL_MALFORMAT
<errorcode>
3
</errorcode>
</verify>

View 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 # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # 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 # These are all libcurl test programs
noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \ noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \
lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \ 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_SOURCES = lib500.c $(SUPPORTFILES)
lib500_LDADD = $(LIBDIR)/libcurl.la lib500_LDADD = $(LIBDIR)/libcurl.la
@ -133,3 +133,7 @@ lib521_DEPENDENCIES = $(LIBDIR)/libcurl.la
lib523_SOURCES = lib523.c $(SUPPORTFILES) lib523_SOURCES = lib523.c $(SUPPORTFILES)
lib523_LDADD = $(LIBDIR)/libcurl.la lib523_LDADD = $(LIBDIR)/libcurl.la
lib523_DEPENDENCIES = $(LIBDIR)/libcurl.la lib523_DEPENDENCIES = $(LIBDIR)/libcurl.la
lib524_SOURCES = lib524.c $(SUPPORTFILES)
lib524_LDADD = $(LIBDIR)/libcurl.la
lib524_DEPENDENCIES = $(LIBDIR)/libcurl.la

15
tests/libtest/lib524.c Normal file
View File

@ -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;
}