diff options
Diffstat (limited to 'src/tool_operhlp.c')
-rw-r--r-- | src/tool_operhlp.c | 20 |
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 |