curl-curl/src
Viktor Szakats 2465f7c61d
tool: improve error/warning messages when output filename sanitization fails
On MS-DOS (OOM and bad filename) and Windows (OOM only).

Given the rarity of both platform and error, we make a compromise and
return an unrelated libcurl error (43) in case of a bad output filename
on MS-DOS.

After:
```
$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/ --output out.txt
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/ --output out.txt
Warning: bad output filename
curl: (43) A libcurl function was given a bad argument

$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: bad output filename
curl: (43) A libcurl function was given a bad argument
```

Before:
```
$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/ --output out.txt
Warning: bad output glob
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/ --output out.txt
Warning: bad output glob
curl: (3) URL using bad/illegal format or missing URL

$ CURL_FN_SANITIZE_OOM=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: Failed to extract a filename from the URL to use for storage
curl: (27) Out of memory

$ CURL_FN_SANITIZE_BAD=1 wine curl.exe https://curl.se/index.html --globoff -O
curl: Failed to extract a filename from the URL to use for storage
curl: (3) URL using bad/illegal format or missing URL
```

Ref: #20116 (simpler reboot of)
Ref: #20113 #20121
Ref: 40c1748af5 #20198
Ref: eb7f5b71e5 #20143
Ref: 8c02407bef #20125
Fixes #20044
Closes #20199
2026-01-10 13:21:27 +01:00
..
toolx localtime: detect thread-safe alternatives and use them 2025-12-16 14:30:06 +01:00
.checksrc checksrc: disallow atoi and atol globally 2025-11-13 14:28:25 +01:00
.gitignore rtmp: remove no longer used proto member 2025-05-08 10:24:19 +02:00
CMakeLists.txt cmake: replace deprecated PERL_FOUND with Perl_FOUND 2025-12-17 17:56:32 +01:00
config2setopts.c config2setopts: add space in cookie header with multiple -b 2026-01-05 23:32:00 +01:00
config2setopts.h curl: remove the global argument from many functions 2025-07-10 23:28:31 +02:00
curl.rc windows: drop code and curl manifest targeting W2K and older 2025-02-24 21:00:31 +01:00
curlinfo.c pytest: replace allowlist with feature check to enable OCSP test 17_08 2026-01-02 01:23:27 +01:00
Makefile.am build: stop disabling strcpy checks with clang-tidy 2025-12-24 00:02:40 +01:00
Makefile.inc curlx: curlx_strcopy() instead of strcpy() 2025-12-22 23:01:05 +01:00
mk-file-embed.pl scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
mkhelp.pl build: stop overriding standard memory allocation functions 2025-11-28 10:44:26 +01:00
slist_wc.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
slist_wc.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
terminal.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
terminal.h curl: make warnings and other messages aware of terminal width 2024-05-28 23:12:32 +02:00
tool_bname.c build: stop overriding standard memory allocation functions 2025-11-28 10:44:26 +01:00
tool_bname.h tidy-up: avoid (()), clang-format fixes and more 2025-12-05 16:07:03 +01:00
tool_cb_dbg.c localtime: detect thread-safe alternatives and use them 2025-12-16 14:30:06 +01:00
tool_cb_dbg.h copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
tool_cb_hdr.c curl: rename a struct OutStruct field to 'regular_file' 2026-01-08 22:34:05 +01:00
tool_cb_hdr.h tool_cb_hrd: remove global pointer from 'struct HdrCbData' 2025-08-05 15:47:56 +02:00
tool_cb_prg.c src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_cb_prg.h tidy-up: miscellaneous 2025-12-18 21:27:58 +01:00
tool_cb_rea.c curl: limit Windows-specific code to Windows builds, other tidy-ups 2026-01-09 09:42:01 +01:00
tool_cb_rea.h copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
tool_cb_see.c tidy-up: miscellaneous 2025-12-18 21:27:58 +01:00
tool_cb_see.h tool: move tool_ftruncate64 to tool_util.c 2024-04-25 09:20:38 +02:00
tool_cb_soc.c checksrc: ensure using ifdef/ifndef when possible, fix fallouts 2025-12-21 21:12:31 +01:00
tool_cb_soc.h curl: (on linux) add MPTCP support 2024-06-07 10:54:19 +02:00
tool_cb_wrt.c curl: rename a struct OutStruct field to 'regular_file' 2026-01-08 22:34:05 +01:00
tool_cb_wrt.h copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
tool_cfgable.c src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_cfgable.h src: drop redundant definition of BIT() 2026-01-02 10:45:12 +01:00
tool_dirhie.c tool_dirhie: drop superfluous F_OK fallback (Windows) 2026-01-07 22:59:52 +01:00
tool_dirhie.h src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_doswin.c tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_doswin.h tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_easysrc.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_easysrc.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_filetime.c windows: fix CreateFile() calls to support long filenames 2025-12-20 14:16:42 +01:00
tool_filetime.h src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_findfile.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_findfile.h windows: use built-in _WIN32 macro to detect Windows 2023-11-22 15:42:25 +00:00
tool_formparse.c src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_formparse.h curl: make global truly global 2025-08-07 10:43:06 +02:00
tool_getparam.c tool_getparam: use UNITTEST not, ifdef 2026-01-04 00:09:12 +01:00
tool_getparam.h tidy-up: avoid (()), clang-format fixes and more 2025-12-05 16:07:03 +01:00
tool_getpass.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_getpass.h code: language cleanup in comments 2024-07-01 22:58:55 +02:00
tool_help.c src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_help.h curl: fix memory leak when -h is used in config file 2025-05-10 11:16:07 +02:00
tool_helpers.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_helpers.h curl: make global truly global 2025-08-07 10:43:06 +02:00
tool_hugehelp.h build: drop tool_hugehelp.c.cvs, tidy up macros, drop buildconf.bat 2025-01-26 14:22:49 +01:00
tool_ipfs.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_ipfs.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_libinfo.c tidy-up: miscellaneous 2025-12-18 21:27:58 +01:00
tool_libinfo.h build: stop overriding standard memory allocation functions 2025-11-28 10:44:26 +01:00
tool_listhelp.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_main.c src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_main.h src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_msgs.c src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_msgs.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_operate.c tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_operate.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_operhlp.c tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_operhlp.h tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_paramhlp.c tool_paramhlp: simplify number parsing 2026-01-01 12:15:34 +01:00
tool_paramhlp.h src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_parsecfg.c tool_urlglob: support globs as long as config line lengths 2025-12-13 14:26:20 +01:00
tool_parsecfg.h tool: log when loading .curlrc in verbose mode 2025-11-25 16:06:27 +01:00
tool_progress.c tool_progress: fix large time outputs and decimal size display 2026-01-04 00:16:59 +01:00
tool_progress.h tool_progress: fix large time outputs and decimal size display 2026-01-04 00:16:59 +01:00
tool_sdecls.h tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_setopt.c src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_setopt.h src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_setup.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_ssls.c source: misc typos 2026-01-01 12:43:59 +01:00
tool_ssls.h src: drop unused includes 2025-12-25 18:42:54 +01:00
tool_stderr.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_stderr.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_strdup.c build: stop overriding standard memory allocation functions 2025-11-28 10:44:26 +01:00
tool_strdup.h build: stop overriding standard memory allocation functions 2025-11-28 10:44:26 +01:00
tool_urlglob.c tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_urlglob.h tool: improve error/warning messages when output filename sanitization fails 2026-01-10 13:21:27 +01:00
tool_util.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_util.h build: drop Windows CE / CeGCC support 2025-11-15 15:35:23 +01:00
tool_version.h src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_vms.c src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_vms.h src: fix formatting nits 2025-12-03 20:50:18 +01:00
tool_writeout_json.c tidy-up: miscellaneous 2025-12-18 21:27:58 +01:00
tool_writeout_json.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_writeout.c curlx: move Curl_gmtime(), use gmtime_s() on Windows 2025-12-16 14:30:05 +01:00
tool_writeout.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_xattr.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
tool_xattr.h src: fix formatting nits 2025-12-03 20:50:18 +01:00
var.c src: drop unused includes 2025-12-25 18:42:54 +01:00
var.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00