From: Daniel Stenberg Date: Mon, 2 Dec 2024 10:53:54 +0000 (+0100) Subject: curl: --continue-at is mutually exclusive with --range X-Git-Tag: curl-8_11_1~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fcb59534e37012dec532be6d3afe2e859f5627d1;p=thirdparty%2Fcurl.git curl: --continue-at is mutually exclusive with --range Allowing both just creates a transfer with behaviors no user can properly anticipate so better just deny the combo. Fixes #15646 Reported-by: Harry Sintonen Closes #15666 --- diff --git a/docs/cmdline-opts/continue-at.md b/docs/cmdline-opts/continue-at.md index 978cafc01f..e57671c350 100644 --- a/docs/cmdline-opts/continue-at.md +++ b/docs/cmdline-opts/continue-at.md @@ -24,3 +24,6 @@ the FTP server command SIZE is not used by curl. Use "-C -" to instruct curl to automatically find out where/how to resume the transfer. It then uses the given output/input files to figure that out. + +This command line option is mutually exclusive with --range: you can only use +one of them for a single transfer. diff --git a/docs/cmdline-opts/range.md b/docs/cmdline-opts/range.md index c2cee2e1f6..306998cd30 100644 --- a/docs/cmdline-opts/range.md +++ b/docs/cmdline-opts/range.md @@ -55,3 +55,6 @@ attempt to get a range, curl instead gets the whole document. FTP and SFTP range downloads only support the simple 'start-stop' syntax (optionally with one of the numbers omitted). FTP use depends on the extended FTP command SIZE. + +This command line option is mutually exclusive with --continue-at: you can only +use one of them for a single transfer. diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 447046f72f..7c31ca1cb6 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -1845,6 +1845,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ err = getstr(&config->cookiejar, nextarg, DENY_BLANK); break; case C_CONTINUE_AT: /* --continue-at */ + if(config->range) { + errorf(global, "--continue-at is mutually exclusive with --range"); + return PARAM_BAD_USE; + } /* This makes us continue an ftp transfer at given position */ if(strcmp(nextarg, "-")) { err = str2offset(&config->resume_from, nextarg); @@ -2397,6 +2401,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ } break; case C_RANGE: /* --range */ + if(config->use_resume) { + errorf(global, "--continue-at is mutually exclusive with --range"); + return PARAM_BAD_USE; + } /* Specifying a range WITHOUT A DASH will create an illegal HTTP range (and will not actually be range by definition). The manpage previously claimed that to be a good way, why this code is added to