From c4bcb8e2bc2a712f24f637c1d5e55c3dabf462ff Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Tue, 18 Nov 2008 19:13:25 +0000 Subject: [PATCH] Added more sanity checking to JPEG2000 layer boundary decoding git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@2362 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse/Imaging/OpenJPEG.cs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/OpenMetaverse/Imaging/OpenJPEG.cs b/OpenMetaverse/Imaging/OpenJPEG.cs index 21d20fd6..975bba6b 100644 --- a/OpenMetaverse/Imaging/OpenJPEG.cs +++ b/OpenMetaverse/Imaging/OpenJPEG.cs @@ -358,7 +358,27 @@ namespace OpenMetaverse.Imaging layerInfo[i].End = endPacket.end_pos; } - success = true; + // More sanity checking + if (layerInfo[layerInfo.Length - 1].End <= encoded.Length - 1) + { + success = true; + + for (int i = 0; i < layerInfo.Length; i++) + { + if (layerInfo[i].Start >= layerInfo[i].End || + (i > 0 && layerInfo[i].Start <= layerInfo[i - 1].End)) + { + success = false; + Logger.Log("Inconsistent packet data in JPEG2000 stream", Helpers.LogLevel.Warning); + } + } + } + else + { + Logger.Log(String.Format( + "Last packet end in JPEG2000 stream extends beyond the end of the file. filesize={0} layerend={1}", + encoded.Length, layerInfo[layerInfo.Length - 1].End), Helpers.LogLevel.Warning); + } } else {