aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/org/tukaani/xz/LZMA2InputStream.java2
-rw-r--r--src/org/tukaani/xz/rangecoder/RangeDecoderFromBuffer.java20
2 files changed, 10 insertions, 12 deletions
diff --git a/src/org/tukaani/xz/LZMA2InputStream.java b/src/org/tukaani/xz/LZMA2InputStream.java
index 4e865c6..d176507 100644
--- a/src/org/tukaani/xz/LZMA2InputStream.java
+++ b/src/org/tukaani/xz/LZMA2InputStream.java
@@ -228,8 +228,6 @@ public class LZMA2InputStream extends InputStream {
} else {
lz.setLimit(copySizeMax);
lzma.decode();
- if (!rc.isInBufferOK())
- throw new CorruptedInputException();
}
int copiedSize = lz.flush(buf, off);
diff --git a/src/org/tukaani/xz/rangecoder/RangeDecoderFromBuffer.java b/src/org/tukaani/xz/rangecoder/RangeDecoderFromBuffer.java
index cac7a7e..58c8b64 100644
--- a/src/org/tukaani/xz/rangecoder/RangeDecoderFromBuffer.java
+++ b/src/org/tukaani/xz/rangecoder/RangeDecoderFromBuffer.java
@@ -18,11 +18,11 @@ public final class RangeDecoderFromBuffer extends RangeDecoder {
private static final int INIT_SIZE = 5;
private final byte[] buf;
- private int pos = 0;
- private int end = 0;
+ private int pos;
public RangeDecoderFromBuffer(int inputSizeMax) {
buf = new byte[inputSizeMax - INIT_SIZE];
+ pos = buf.length;
}
public void prepareInputBuffer(DataInputStream in, int len)
@@ -36,17 +36,17 @@ public final class RangeDecoderFromBuffer extends RangeDecoder {
code = in.readInt();
range = 0xFFFFFFFF;
- pos = 0;
- end = len - INIT_SIZE;
- in.readFully(buf, 0, end);
- }
-
- public boolean isInBufferOK() {
- return pos <= end;
+ // Read the data to the end of the buffer. If the data is corrupt
+ // and the decoder, reading from buf, tries to read past the end of
+ // the data, ArrayIndexOutOfBoundsException will be thrown and
+ // the problem is detected immediately.
+ len -= INIT_SIZE;
+ pos = buf.length - len;
+ in.readFully(buf, pos, len);
}
public boolean isFinished() {
- return pos == end && code == 0;
+ return pos == buf.length && code == 0;
}
public void normalize() throws IOException {