From 417f0ede41d1dcfed45ae56f515f2ea6d63e599f Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 20 Jan 2010 15:59:26 -0800
Subject: [PATCH] EXT-4388 Crash in octree line segment intersection code (more
 accurately, it was - I believe - reading over the end of a buffer in the
 pick-mask lookup)

reviewed by qarl.
---
 indra/llrender/llimagegl.cpp | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index d873005fd99..cd493481d5b 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1736,12 +1736,25 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
 		if (u < 0.f || u > 1.f ||
 		    v < 0.f || v > 1.f)
 		{
-			llerrs << "WTF?" << llendl;
+			LL_WARNS_ONCE("render") << "Ugh, u/v out of range in image mask pick" << LL_ENDL;
+			u = v = 0.f;
+			llassert(false);
 		}
 		
 		S32 x = (S32)(u * width);
 		S32 y = (S32)(v * height);
 
+		if (x >= width)
+		{
+			LL_WARNS_ONCE("render") << "Ooh, width overrun on pick mask read, that coulda been bad." << LL_ENDL;
+			x = llmax(0, width-1);
+		}
+		if (y >= height)
+		{
+			LL_WARNS_ONCE("render") << "Ooh, height overrun on pick mask read, that woulda been bad." << LL_ENDL;
+			y = llmax(0, height-1);
+		}
+
 		S32 idx = y*width+x;
 		S32 offset = idx%8;
 
-- 
GitLab