From 06d3a529a9ea31de997f187bfa6a646e25b7a1cf Mon Sep 17 00:00:00 2001
From: Latif Khalifa
Date: Sat, 9 Oct 2010 17:46:09 +0200
Subject: In case when 1 single byte is requested (yes viewer does this) start
 of the ranges gets clamped with a wrong value. In case of a texture with 601
 byte long texture the viewer request range 0-599 first, then 600- in which
 case both start and end should be 600.

End can also be 0, valid request for the firt byte of the file is 0-0.

Thanks to Thickbrick for explaining how HTTP range header works.
---
 OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs
index a3238df..d564ee6 100644
--- a/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs
@@ -187,8 +187,8 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps
                 int start, end;
                 if (TryParseRange(range, out start, out end))
                 {
-                    end = Utils.Clamp(end, 1, texture.Data.Length - 1);
-                    start = Utils.Clamp(start, 0, end - 1);
+                    end = Utils.Clamp(end, 0, texture.Data.Length - 1);
+                    start = Utils.Clamp(start, 0, end);
                     int len = end - start + 1;
 
                     //m_log.Debug("Serving " + start + " to " + end + " of " + texture.Data.Length + " bytes for texture " + texture.ID);
-- 
cgit v1.1