From 66171216b01c1c5afafd3405a9d17e81f50c1925 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 6 Nov 2009 15:19:30 +0000
Subject: [PATCH] SNOW-329 Handling of error case in llimage.cpp incorrect This
 is the same fix as DEV-32269, trivially ported to viewer2. reviewed by merov,
 james, moss!

---
 indra/llimage/llimage.cpp | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 9bbc55509dd..73c23fa8d81 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -1223,25 +1223,28 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip
 	ifs.read ((char*)buffer, length);
 	ifs.close();
 	
-	image->updateData();
-	
-	if (j2c_lowest_mip_only && codec == IMG_CODEC_J2C)
+	BOOL success;
+
+	success = image->updateData();
+	if (success)
 	{
-		S32 width = image->getWidth();
-		S32 height = image->getHeight();
-		S32 discard_level = 0;
-		while (width > 1 && height > 1 && discard_level < MAX_DISCARD_LEVEL)
+		if (j2c_lowest_mip_only && codec == IMG_CODEC_J2C)
 		{
-			width >>= 1;
-			height >>= 1;
-			discard_level++;
+			S32 width = image->getWidth();
+			S32 height = image->getHeight();
+			S32 discard_level = 0;
+			while (width > 1 && height > 1 && discard_level < MAX_DISCARD_LEVEL)
+			{
+				width >>= 1;
+				height >>= 1;
+				discard_level++;
+			}
+			((LLImageJ2C *)((LLImageFormatted*)image))->setDiscardLevel(discard_level);
 		}
-		((LLImageJ2C *)((LLImageFormatted*)image))->setDiscardLevel(discard_level);
+		success = image->decode(this, 100000.0f);
 	}
-	
-	BOOL success = image->decode(this, 100000.0f);
-	image = NULL; // deletes image
 
+	image = NULL; // deletes image
 	if (!success)
 	{
 		deleteData();
-- 
GitLab