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