mod_http_file_share: Fix off by one in Range response

See #1914
This commit is contained in:
Kim Alvefur 2025-03-23 12:21:19 +01:00
parent b9d4cc24df
commit afd99708d6

View file

@ -429,13 +429,14 @@ function handle_download(event, path) -- GET /uploads/:slot+filename
local request_range = request.headers.range;
local response_range;
if request_range then
local last_byte = string.format("%d", tonumber(filesize) - 1);
local range_start, range_end = request_range:match("^bytes=(%d+)%-(%d*)$")
-- Only support resumption, ie ranges from somewhere in the middle until the end of the file.
if (range_start and range_start ~= "0") and (range_end == "" or range_end == filesize) then
if (range_start and range_start ~= "0") and (range_end == "" or range_end == last_byte) then
local pos, size = tonumber(range_start), tonumber(filesize);
local new_pos = pos < size and handle:seek("set", pos);
if new_pos and new_pos < size then
response_range = "bytes "..range_start.."-"..filesize.."/"..filesize;
response_range = "bytes "..range_start.."-"..last_byte.."/"..filesize;
filesize = string.format("%d", size-pos);
else
handle:close();