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)]