From 3686c212e1e112ef397c662d7b509ab0b6b70d7d Mon Sep 17 00:00:00 2001
From: Bradley Grainger <bgrainger@gmail.com>
Date: Wed, 19 Mar 2025 20:06:02 -0700
Subject: [PATCH] Set Range header correctly in AddRange.

Fixes https://github.com/dotnet/runtime/issues/113690.
---
 .../src/System/Net/HttpWebRequest.cs          |  2 +-
 .../tests/HttpWebRequestTest.cs               | 20 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs b/src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs
index ee2466d285a142..c42a0e00a592aa 100644
--- a/src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs
+++ b/src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs
@@ -1544,7 +1544,7 @@ private bool AddRange(string rangeSpecifier, string from, string? to)
                 {
                     return false;
                 }
-                curRange = string.Empty;
+                curRange += ",";
             }
             curRange += from.ToString();
             if (to != null)
diff --git a/src/libraries/System.Net.Requests/tests/HttpWebRequestTest.cs b/src/libraries/System.Net.Requests/tests/HttpWebRequestTest.cs
index 2dcbc910bff4bc..e42da7ec352f1c 100644
--- a/src/libraries/System.Net.Requests/tests/HttpWebRequestTest.cs
+++ b/src/libraries/System.Net.Requests/tests/HttpWebRequestTest.cs
@@ -1427,6 +1427,26 @@ public void Range_Add_Success(Uri remoteServer)
             Assert.Equal("bytes=1-5", request.Headers["Range"]);
         }
 
+        [Theory, MemberData(nameof(EchoServers))]
+        public void Range_AddTwice_Success(Uri remoteServer)
+        {
+            HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
+            request.AddRange(1, 5);
+            request.AddRange(11, 15);
+            Assert.Equal("bytes=1-5,11-15", request.Headers["Range"]);
+        }
+
+        [Theory, MemberData(nameof(EchoServers))]
+        public void Range_AddMultiple_Success(Uri remoteServer)
+        {
+            HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
+            request.AddRange(int.MaxValue);
+            request.AddRange(100, 200);
+            request.AddRange(long.MaxValue);
+            request.AddRange(1000L, 2000L);
+            Assert.Equal("bytes=2147483647-,100-200,9223372036854775807-,1000-2000", request.Headers["Range"]);
+        }
+
         [Theory]
         [InlineData(true)]
         [InlineData(false)]