Diff

plugins/mod_http_file_share.lua @ 13785:d7e54a2475cc 13.0

mod_http_file_share: Fix off by one in Range response See #1914
author Kim Alvefur <zash@zash.se>
date Sun, 23 Mar 2025 12:21:19 +0100
parent 13776:977415e0122d
child 13786:284b100acda1
line wrap: on
line diff
--- a/plugins/mod_http_file_share.lua	Sun Mar 23 12:15:16 2025 +0100
+++ b/plugins/mod_http_file_share.lua	Sun Mar 23 12:21:19 2025 +0100
@@ -429,13 +429,14 @@
 	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();