diff --git a/CSJ2K/j2k/codestream/reader/FileBitstreamReaderAgent.cs b/CSJ2K/j2k/codestream/reader/FileBitstreamReaderAgent.cs index 4dfaecf7..8eb1e54c 100644 --- a/CSJ2K/j2k/codestream/reader/FileBitstreamReaderAgent.cs +++ b/CSJ2K/j2k/codestream/reader/FileBitstreamReaderAgent.cs @@ -598,7 +598,11 @@ namespace CSJ2K.j2k.codestream.reader { try { - if (!rateReached && !isPsotEqualsZero && in_Renamed.readShort() != CSJ2K.j2k.codestream.Markers.EOC) + short eocCheck = 0; + if (in_Renamed.Pos + 2 < in_Renamed.length()) + eocCheck = in_Renamed.readShort(); + + if (!rateReached && !isPsotEqualsZero && eocCheck != CSJ2K.j2k.codestream.Markers.EOC) { FacilityManager.getMsgLogger().printmsg(CSJ2K.j2k.util.MsgLogger_Fields.WARNING, "EOC marker not found. " + "Codestream is corrupted."); } diff --git a/CSJ2K/j2k/codestream/reader/PktDecoder.cs b/CSJ2K/j2k/codestream/reader/PktDecoder.cs index 27a4ec59..ac4390d5 100644 --- a/CSJ2K/j2k/codestream/reader/PktDecoder.cs +++ b/CSJ2K/j2k/codestream/reader/PktDecoder.cs @@ -1433,7 +1433,13 @@ namespace CSJ2K.j2k.codestream.reader ccb.ntp[l] = 0; ccb.pktIdx[l] = - 1; } - throw new System.IO.EndOfStreamException(); + + // JH: If we try and seek past the end of the stream just stop the decoding + curOff = ehs.length() - 1; + ehs.seek(curOff); + stopRead = true; + return true; + //throw new System.IO.EndOfStreamException(); } // If truncation mode