From c2ebdefe8d7ccc32b8237845a36f779f6634d328 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Tue, 26 May 2020 02:11:26 +0400 Subject: [PATCH] Handling of unsatisfiable ranges --- src/server/byte_range.cpp | 3 +++ test/server.cpp | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/byte_range.cpp b/src/server/byte_range.cpp index 45f10b668..be1ddcb97 100644 --- a/src/server/byte_range.cpp +++ b/src/server/byte_range.cpp @@ -85,6 +85,9 @@ ByteRange ByteRange::resolve(int64_t contentSize) const const int64_t resolved_last = std::min(contentSize-1, last()); + if ( resolved_first > resolved_last ) + return ByteRange(INVALID, 0, contentSize-1); + return ByteRange(RESOLVED_PARTIAL_CONTENT, resolved_first, resolved_last); } diff --git a/test/server.cpp b/test/server.cpp index 22a60490a..83037b7ff 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -465,7 +465,9 @@ TEST_F(ServerTest, InvalidAndMultiRangeByteRangeRequestsResultIn416Responses) const char* invalidRanges[] = { "0-10", "bytes=", "bytes=123", "bytes=-10-20", "bytes=10-20xxx", - "bytes=10-0", "bytes=10-20, 30-40" + "bytes=10-0", // reversed range + "bytes=10-20, 30-40", // multi-range + "bytes=1000000-", "bytes=30000-30100" // unsatisfiable ranges }; for( const char* range : invalidRanges )