You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2018/01/09 17:41:11 UTC

[18/28] commons-compress git commit: COMPRESS-380 -1 is certainly a legal value for a byte

COMPRESS-380 -1 is certainly a legal value for a byte


Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/07ed5450
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/07ed5450
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/07ed5450

Branch: refs/heads/master
Commit: 07ed545022f30604d0a4fc4ad5e4866e24e6a172
Parents: 87a3cfa
Author: Stefan Bodewig <bo...@apache.org>
Authored: Sun Jan 7 10:52:16 2018 +0100
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Sun Jan 7 10:52:16 2018 +0100

----------------------------------------------------------------------
 .../compress/compressors/deflate64/HuffmanDecoder.java    | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-compress/blob/07ed5450/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
index f74c7de..9d6585a 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
@@ -445,6 +445,7 @@ class HuffmanDecoder implements Closeable {
         private final byte[] memory;
         private final int mask;
         private int wHead;
+        private boolean wrappedAround;
 
         private DecodingMemory() {
             this(16);
@@ -452,7 +453,6 @@ class HuffmanDecoder implements Closeable {
 
         private DecodingMemory(int bits) {
             memory = new byte[1 << bits];
-            Arrays.fill(memory, (byte) -1);
             mask = memory.length - 1;
         }
 
@@ -467,7 +467,7 @@ class HuffmanDecoder implements Closeable {
                 throw new IllegalStateException("Illegal distance parameter: " + distance);
             }
             int start = (wHead - distance) & mask;
-            if (memory[start] == -1) {
+            if (!wrappedAround && start >= wHead) {
                 throw new IllegalStateException("Attempt to read beyond memory: dist=" + distance);
             }
             for (int i = 0, pos = start; i < length; i++, pos = incCounter(pos)) {
@@ -476,7 +476,11 @@ class HuffmanDecoder implements Closeable {
         }
 
         private int incCounter(int counter) {
-            return (counter + 1) & mask;
+            final int newCounter = (counter + 1) & mask;
+            if (!wrappedAround && newCounter < counter) {
+                wrappedAround = true;
+            }
+            return newCounter;
         }
     }