From 9d152a77fd4b2c64db4631119103bbc13385945f Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Thu, 27 Oct 2005 12:05:36 +0000
Subject: [PATCH] Jaz Fresh pointed out that if you used "-r [number]" as was
 wrongly described in the man page, curl would send an invalid HTTP Range:
 header. The correct way would be to use "-r [number]-" or even "-r
 -[number]". Starting now, curl will warn if this is discovered, and
 automatically append a dash to the range before passing it to libcurl.

---
 CHANGES       |  7 +++++++
 RELEASE-NOTES |  4 +++-
 docs/curl.1   |  2 +-
 src/main.c    | 20 ++++++++++++++++++--
 4 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/CHANGES b/CHANGES
index a998afb42e..da9f357c7e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,13 @@
 
 
 
+Daniel (27 October 2005)
+- Jaz Fresh pointed out that if you used "-r [number]" as was wrongly described
+  in the man page, curl would send an invalid HTTP Range: header. The correct
+  way would be to use "-r [number]-" or even "-r -[number]". Starting now,
+  curl will warn if this is discovered, and automatically append a dash to the
+  range before passing it to libcurl.
+
 Daniel (25 October 2005)
 - Amol Pattekar reported a bug with great detail and a fine example in bug
   #1326306 (http://curl.haxx.se/bug/view.cgi?id=1326306). When using the multi
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 93426d6304..e848117584 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -15,6 +15,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o -r [num] would produce an invalid HTTP Range: header
  o multi interface with multi IP hosts could leak socket descriptors
  o the GnuTLS code didn't handle rehandshakes
  o re-use of a dead FTP connection
@@ -32,6 +33,7 @@ Other curl-related news since the previous public release:
 This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
- Dave Dribin, Bradford Bruce, Temprimus
+ Dave Dribin, Bradford Bruce, Temprimus, Ofer, Dima Barsky, Amol Pattekar, Jaz
+ Fresh
 
         Thanks! (and sorry if I forgot to mention someone)
diff --git a/docs/curl.1 b/docs/curl.1
index 69d890a6ea..8a422b9e2a 100644
--- a/docs/curl.1
+++ b/docs/curl.1
@@ -770,7 +770,7 @@ specifies the second 500 bytes
 .B -500
 specifies the last 500 bytes
 .TP
-.B 9500
+.B 9500-
 specifies the bytes from offset 9500 and forward
 .TP
 .B 0-0,-1
diff --git a/src/main.c b/src/main.c
index 818b5baab3..cd42b0d060 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2097,8 +2097,24 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
         return err;
       break;
     case 'r':
-      /* byte range requested */
-      GetStr(&config->range, nextarg);
+      /* Specifying a range WITHOUT A DASH will create an illegal HTTP range
+         (and won't actually be range by definition). The man page previously
+         claimed that to be a good way, why this code is added to work-around
+         it. */
+      if(!strchr(nextarg, '-')) {
+        char buffer[32];
+        curl_off_t off;
+        warnf(config,
+              "A specfied range MUST include at least one dash (-). "
+              "Appending one for you!\n");
+        off = curlx_strtoofft(nextarg, NULL, 10);
+        snprintf(buffer, sizeof(buffer), CURL_FORMAT_OFF_T "-", off);
+        GetStr(&config->range, buffer);
+      }
+      else
+        /* byte range requested */
+        GetStr(&config->range, nextarg);
+
       break;
     case 'R':
       /* use remote file's time */
-- 
GitLab