diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 9bbc55509dd8f48809426d69cbfbe0d0c9bf5d0d..73c23fa8d8158879cdf7774aaf893f22dc5150b3 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();