Author: bodewig
Date: Wed Jan 22 05:13:34 2014
New Revision: 1560252

URL: http://svn.apache.org/r1560252
Log:
COMPRESS-256 bad calculation of LZMA dictionary sizes

Added:
    commons/proper/compress/trunk/src/test/resources/COMPRESS-256.7z   (with 
props)
Modified:
    commons/proper/compress/trunk/src/changes/changes.xml
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
    
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java

Modified: commons/proper/compress/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/changes/changes.xml?rev=1560252&r1=1560251&r2=1560252&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/changes/changes.xml (original)
+++ commons/proper/compress/trunk/src/changes/changes.xml Wed Jan 22 05:13:34 
2014
@@ -48,6 +48,11 @@ The <action> type attribute can be add,u
         BZip2CompressorInputStream read fewer bytes than possible from
         a truncated stream.
       </action> 
+      <action issue="COMPRESS-253" type="fix" date="2014-01-22">
+        SevenZFile failed claiming the dictionary was too large when
+        archives used LZMA compression for headers and content and
+        certain non-default dictinary sizes.
+      </action>
     </release>
     <release version="1.7" date="2014-01-20"
              description="Release 1.7">

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java?rev=1560252&r1=1560251&r2=1560252&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
 Wed Jan 22 05:13:34 2014
@@ -109,7 +109,7 @@ class Coders {
             byte propsByte = coder.properties[0];
             long dictSize = coder.properties[1];
             for (int i = 1; i < 4; i++) {
-                dictSize |= (coder.properties[i + 1] << (8 * i));
+                dictSize |= (coder.properties[i + 1] & 0xffl) << (8 * i);
             }
             if (dictSize > LZMAInputStream.DICT_SIZE_MAX) {
                 throw new IOException("Dictionary larger than 4GiB maximum 
size");

Modified: 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java?rev=1560252&r1=1560251&r2=1560252&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java
 (original)
+++ 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java
 Wed Jan 22 05:13:34 2014
@@ -72,6 +72,22 @@ public class SevenZFileTest extends Abst
         }
     }
 
+    /**
+     * @see "https://issues.apache.org/jira/browse/COMPRESS-256";
+     */
+    public void testCompressedHeaderWithNonDefaultDictionarySize() throws 
Exception {
+        SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z"));
+        try {
+            int count = 0;
+            while (sevenZFile.getNextEntry() != null) {
+                count++;
+            }
+            assertEquals(446, count);
+        } finally {
+            sevenZFile.close();
+        }
+    }
+
     private void test7zUnarchive(File f, byte[] password) throws Exception {
         SevenZFile sevenZFile = new SevenZFile(f, password);
         try {

Added: commons/proper/compress/trunk/src/test/resources/COMPRESS-256.7z
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/resources/COMPRESS-256.7z?rev=1560252&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/compress/trunk/src/test/resources/COMPRESS-256.7z
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream


Reply via email to