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 2013/06/09 15:34:26 UTC
svn commit: r1491216 - in /commons/proper/compress/branches/LZMA/src:
main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java
test/resources/bla.7z
Author: bodewig
Date: Sun Jun 9 13:34:26 2013
New Revision: 1491216
URL: http://svn.apache.org/r1491216
Log:
Add LZMA support to 7z - I don't think this adds support for compressed headers
Added:
commons/proper/compress/branches/LZMA/src/test/resources/bla.7z (with props)
Modified:
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
commons/proper/compress/branches/LZMA/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java
Modified: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java?rev=1491216&r1=1491215&r2=1491216&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java (original)
+++ commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java Sun Jun 9 13:34:26 2013
@@ -31,6 +31,7 @@ import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
+import org.tukaani.xz.LZMAInputStream;
import org.tukaani.xz.LZMA2InputStream;
class Coders {
@@ -47,6 +48,7 @@ class Coders {
static CoderId[] coderTable = new CoderId[] {
new CoderId(new byte[] { (byte)0x00 }, new CopyDecoder()),
+ new CoderId(new byte[] { (byte)0x03, (byte)0x01, (byte)0x01 }, new LZMADecoder()),
new CoderId(new byte[] { (byte)0x21 }, new LZMA2Decoder()),
// FIXME: gives corrupt output
//new CoderId(new byte[] { (byte)0x04, (byte)0x01, (byte)0x08 }, new DeflateDecoder()),
@@ -98,6 +100,22 @@ class Coders {
}
}
+ static class LZMADecoder extends CoderBase {
+ @Override
+ InputStream decode(final InputStream in, final Coder coder,
+ String password) throws IOException {
+ byte propsByte = coder.properties[0];
+ long dictSize = coder.properties[1];
+ for (int i = 1; i < 4; i++) {
+ dictSize |= (coder.properties[i + 1] << (8 * i));
+ }
+ if (dictSize > LZMAInputStream.DICT_SIZE_MAX) {
+ throw new IOException("Dictionary larger than 4GiB maximum size");
+ }
+ return new LZMAInputStream(in, -1, propsByte, (int) dictSize);
+ }
+ }
+
// static class DeflateDecoder extends CoderBase {
// @Override
// InputStream decode(final InputStream in, final Coder coder, final String password)
Modified: commons/proper/compress/branches/LZMA/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java?rev=1491216&r1=1491215&r2=1491216&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java (original)
+++ commons/proper/compress/branches/LZMA/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java Sun Jun 9 13:34:26 2013
@@ -20,6 +20,9 @@ package org.apache.commons.compress.arch
import org.apache.commons.compress.AbstractTestCase;
public class SevenZFileTest extends AbstractTestCase {
+ private static String TEST2_CONTENT = "<?xml version = '1.0'?>\r\n<!DOCTYPE"
+ + " connections>\r\n<meinxml>\r\n\t<leer />\r\n</meinxml>\n";
+
public void testAllEmptyFilesArchive() throws Exception {
SevenZFile archive = new SevenZFile(getFile("7z-empty-mhc-off.7z"));
try {
@@ -37,6 +40,27 @@ public class SevenZFileTest extends Abst
checkHelloWorld("7z-hello-mhc-off-lzma2.7z");
}
+ public void test7zUnarchive() throws Exception {
+ SevenZFile sevenZFile = new SevenZFile(getFile("bla.7z"));
+ try {
+ SevenZArchiveEntry entry = sevenZFile.getNextEntry();
+ assertEquals("test1.xml", entry.getName());
+ entry = sevenZFile.getNextEntry();
+ assertEquals("test2.xml", entry.getName());
+ byte[] contents = new byte[(int)entry.getSize()];
+ int off = 0;
+ while ((off < contents.length)) {
+ int bytesRead = sevenZFile.read(contents, off, contents.length - off);
+ assert(bytesRead >= 0);
+ off += bytesRead;
+ }
+ assertEquals(TEST2_CONTENT, new String(contents, "UTF-8"));
+ assertNull(sevenZFile.getNextEntry());
+ } finally {
+ sevenZFile.close();
+ }
+ }
+
private void checkHelloWorld(final String filename) throws Exception {
SevenZFile sevenZFile = new SevenZFile(getFile(filename));
try {
Added: commons/proper/compress/branches/LZMA/src/test/resources/bla.7z
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/test/resources/bla.7z?rev=1491216&view=auto
==============================================================================
Binary file - no diff available.
Propchange: commons/proper/compress/branches/LZMA/src/test/resources/bla.7z
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream