From 693905eb682fa244be4d9b1853e65108c6ddcac6 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Mon, 25 May 2020 17:17:56 +0400 Subject: [PATCH] Default constructed ByteRange is a full range --- src/server/byte_range.cpp | 2 +- src/server/request_context.cpp | 28 ++++++++++------------------ src/server/response.cpp | 4 +--- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/server/byte_range.cpp b/src/server/byte_range.cpp index 5b3c98b2..5482914a 100644 --- a/src/server/byte_range.cpp +++ b/src/server/byte_range.cpp @@ -25,7 +25,7 @@ namespace kiwix { ByteRange::ByteRange() : kind_(NONE) , first_(0) - , last_(-1) + , last_(INT64_MAX) {} ByteRange::ByteRange(Kind kind, int64_t first, int64_t last) diff --git a/src/server/request_context.cpp b/src/server/request_context.cpp index 43259d8d..931069b1 100644 --- a/src/server/request_context.cpp +++ b/src/server/request_context.cpp @@ -65,31 +65,23 @@ fullURL2LocalURL(const std::string& full_url, const std::string& rootLocation) ByteRange parse_byte_range(std::string range) { - const int64_t int64_max = std::numeric_limits::max(); - ByteRange byteRange; const std::string byteUnitSpec("bytes="); if ( kiwix::startsWith(range, byteUnitSpec) ) { range.erase(0, byteUnitSpec.size()); - int start = 0; - int end = -1; std::istringstream iss(range); - char c; - iss >> start; - if ( start < 0 ) { - if ( iss.eof() ) - byteRange = ByteRange(ByteRange::PARSED, start, int64_max); - } else { - iss >> c; - if (iss.good() && c=='-') { - iss >> end; - if (iss.fail()) { - // Something went wrong while extracting - end = -1; - } - if (iss.eof()) { + int64_t start, end = INT64_MAX; + if (iss >> start) { + if ( start < 0 ) { + if ( iss.eof() ) byteRange = ByteRange(ByteRange::PARSED, start, end); + } else { + char c; + if (iss >> c && c=='-') { + iss >> end; // if this fails, end is not modified, which is OK + if (iss.eof()) + byteRange = ByteRange(ByteRange::PARSED, start, end); } } } diff --git a/src/server/response.cpp b/src/server/response.cpp index 77d545a5..3e721b3a 100644 --- a/src/server/response.cpp +++ b/src/server/response.cpp @@ -50,9 +50,7 @@ ByteRange resolve_byte_range(const kiwix::Entry& entry, ByteRange range) ? std::max(int64_t(0), entrySize + range.first()) : range.first(); - const int64_t resolved_last = range.last() < 0 - ? entrySize - 1 - : std::min(entrySize-1, range.last()); + const int64_t resolved_last = std::min(entrySize-1, range.last()); return ByteRange(ByteRange::RESOLVED_PARTIAL_CONTENT, resolved_first, resolved_last); }