Skip to content
Snippets Groups Projects
Commit 17ca80e1 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Fix stream decompression.

parent b6806878
Branches
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ import azgracompress.utilities.Utils; ...@@ -10,6 +10,7 @@ import azgracompress.utilities.Utils;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.io.*; import java.io.*;
import java.util.Arrays;
import java.util.Optional; import java.util.Optional;
...@@ -293,9 +294,12 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -293,9 +294,12 @@ public class ImageDecompressor extends CompressorDecompressorBase {
try (DataInputStream dis = new DataInputStream(new BufferedInputStream(compressedStream))) { try (DataInputStream dis = new DataInputStream(new BufferedInputStream(compressedStream))) {
assert (dis.markSupported()); assert (dis.markSupported());
cachedHeader.setImageSizeX(dis.readUnsignedShort()); final QCMPFileHeader header = cachedHeader.copyOf();
cachedHeader.setImageSizeY(dis.readUnsignedShort());
cachedHeader.setImageSizeZ(dis.readUnsignedShort()); header.setImageSizeX(dis.readUnsignedShort());
header.setImageSizeY(dis.readUnsignedShort());
header.setImageSizeZ(dis.readUnsignedShort());
final int chunkCount = dis.readUnsignedShort(); final int chunkCount = dis.readUnsignedShort();
final long[] chunkSizes = new long[chunkCount]; final long[] chunkSizes = new long[chunkCount];
...@@ -303,7 +307,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -303,7 +307,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
dis.mark(contentLength); dis.mark(contentLength);
{ {
int toSkip = contentLength - (4 * 2); int toSkip = contentLength - ((4 * 2) + (chunkCount * 2));
while (toSkip > 0) { while (toSkip > 0) {
int skipped = dis.skipBytes(toSkip); int skipped = dis.skipBytes(toSkip);
assert (skipped > 0); assert (skipped > 0);
...@@ -311,16 +315,16 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -311,16 +315,16 @@ public class ImageDecompressor extends CompressorDecompressorBase {
} }
assert (toSkip == 0); assert (toSkip == 0);
for (int i = 0; i < chunkCount; i++) { for (int i = 0; i < chunkCount; i++) {
chunkSizes[i] = dis.readInt(); chunkSizes[i] = dis.readUnsignedShort();
} }
} }
dis.reset(); dis.reset();
cachedHeader.setPlaneDataSizes(chunkSizes); header.setPlaneDataSizes(chunkSizes);
return cachedDecompressor.decompressStreamMode(dis, cachedHeader); return cachedDecompressor.decompressStreamMode(dis, header);
} catch (IOException e) { } catch (IOException e) {
throw new ImageDecompressionException("Unable to decompress chunk of image from stream.", e); throw new ImageDecompressionException("Unable to decompress chunk of image from stream.", e);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment