aboutsummaryrefslogtreecommitdiffstats
path: root/src/tool_operhlp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tool_operhlp.c')
-rw-r--r--src/tool_operhlp.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/tool_operhlp.c b/src/tool_operhlp.c
index abf94961..b43dc954 100644
--- a/src/tool_operhlp.c
+++ b/src/tool_operhlp.c
@@ -9,7 +9,7 @@
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
+ * are also available at https://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
@@ -29,6 +29,7 @@
#include "tool_cfgable.h"
#include "tool_convert.h"
+#include "tool_doswin.h"
#include "tool_operhlp.h"
#include "tool_metalink.h"
@@ -128,7 +129,7 @@ char *add_file_name_to_url(CURL *curl, char *url, const char *filename)
*/
CURLcode get_url_file_name(char **filename, const char *url)
{
- const char *pc;
+ const char *pc, *pc2;
*filename = NULL;
@@ -138,7 +139,11 @@ CURLcode get_url_file_name(char **filename, const char *url)
pc += 3;
else
pc = url;
+
+ pc2 = strrchr(pc, '\\');
pc = strrchr(pc, '/');
+ if(pc2 && (!pc || pc < pc2))
+ pc = pc2;
if(pc)
/* duplicate the string beyond the slash */
@@ -151,6 +156,17 @@ CURLcode get_url_file_name(char **filename, const char *url)
if(!*filename)
return CURLE_OUT_OF_MEMORY;
+#if defined(MSDOS) || defined(WIN32)
+ {
+ char *sanitized;
+ SANITIZEcode sc = sanitize_file_name(&sanitized, *filename, 0);
+ Curl_safefree(*filename);
+ if(sc)
+ return CURLE_URL_MALFORMAT;
+ *filename = sanitized;
+ }
+#endif /* MSDOS || WIN32 */
+
/* in case we built debug enabled, we allow an environment variable
* named CURL_TESTDIR to prefix the given file name to put it into a
* specific directory