diff --git a/src/main/java/azgracompress/compression/ImageDecompressor.java b/src/main/java/azgracompress/compression/ImageDecompressor.java index e762149ed67f77655fabe67844a754e5bb39f83a..b8ab49d456c7fee7741eeca8f1766ad4bc63f51b 100644 --- a/src/main/java/azgracompress/compression/ImageDecompressor.java +++ b/src/main/java/azgracompress/compression/ImageDecompressor.java @@ -10,6 +10,7 @@ import azgracompress.utilities.Utils; import org.jetbrains.annotations.Nullable; import java.io.*; +import java.util.Arrays; import java.util.Optional; @@ -293,9 +294,12 @@ public class ImageDecompressor extends CompressorDecompressorBase { try (DataInputStream dis = new DataInputStream(new BufferedInputStream(compressedStream))) { assert (dis.markSupported()); - cachedHeader.setImageSizeX(dis.readUnsignedShort()); - cachedHeader.setImageSizeY(dis.readUnsignedShort()); - cachedHeader.setImageSizeZ(dis.readUnsignedShort()); + final QCMPFileHeader header = cachedHeader.copyOf(); + + header.setImageSizeX(dis.readUnsignedShort()); + header.setImageSizeY(dis.readUnsignedShort()); + header.setImageSizeZ(dis.readUnsignedShort()); + final int chunkCount = dis.readUnsignedShort(); final long[] chunkSizes = new long[chunkCount]; @@ -303,7 +307,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { dis.mark(contentLength); { - int toSkip = contentLength - (4 * 2); + int toSkip = contentLength - ((4 * 2) + (chunkCount * 2)); while (toSkip > 0) { int skipped = dis.skipBytes(toSkip); assert (skipped > 0); @@ -311,16 +315,16 @@ public class ImageDecompressor extends CompressorDecompressorBase { } assert (toSkip == 0); for (int i = 0; i < chunkCount; i++) { - chunkSizes[i] = dis.readInt(); + chunkSizes[i] = dis.readUnsignedShort(); } } dis.reset(); - cachedHeader.setPlaneDataSizes(chunkSizes); + header.setPlaneDataSizes(chunkSizes); - return cachedDecompressor.decompressStreamMode(dis, cachedHeader); + return cachedDecompressor.decompressStreamMode(dis, header); } catch (IOException e) { throw new ImageDecompressionException("Unable to decompress chunk of image from stream.", e); }