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 2014/02/22 19:58:22 UTC

svn commit: r1570881 - in /commons/proper/compress/trunk/src: main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java

Author: bodewig
Date: Sat Feb 22 18:58:21 2014
New Revision: 1570881

URL: http://svn.apache.org/r1570881
Log:
COMPRESS-267 add a matches method to SevenZFile

Modified:
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
    commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java?rev=1570881&r1=1570880&r2=1570881&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java Sat Feb 22 18:58:21 2014
@@ -908,4 +908,27 @@ public class SevenZFile implements Close
         }
         return value;
     }
+
+    /**
+     * Checks if the signature matches what is expected for a 7z file.
+     *
+     * @param signature
+     *            the bytes to check
+     * @param length
+     *            the number of bytes to check
+     * @return true, if this is the signature of a 7z archive.
+     * @since 1.8
+     */
+    public static boolean matches(byte[] signature, int length) {
+        if (length < sevenZSignature.length) {
+            return false;
+        }
+
+        for (int i = 0; i < sevenZSignature.length; i++) {
+            if (signature[i] != sevenZSignature[i]) {
+                return false;
+            }
+        }
+        return true;
+    }
 }

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=1570881&r1=1570880&r2=1570881&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 Sat Feb 22 18:58:21 2014
@@ -88,6 +88,20 @@ public class SevenZFileTest extends Abst
         }
     }
 
+    public void testSignatureCheck() {
+        assertTrue(SevenZFile.matches(SevenZFile.sevenZSignature,
+                                      SevenZFile.sevenZSignature.length));
+        assertTrue(SevenZFile.matches(SevenZFile.sevenZSignature,
+                                      SevenZFile.sevenZSignature.length + 1));
+        assertFalse(SevenZFile.matches(SevenZFile.sevenZSignature,
+                                      SevenZFile.sevenZSignature.length - 1));
+        assertFalse(SevenZFile.matches(new byte[] { 1, 2, 3, 4, 5, 6 }, 6));
+        assertTrue(SevenZFile.matches(new byte[] { '7', 'z', (byte) 0xBC,
+                                                   (byte) 0xAF, 0x27, 0x1C}, 6));
+        assertFalse(SevenZFile.matches(new byte[] { '7', 'z', (byte) 0xBC,
+                                                    (byte) 0xAF, 0x27, 0x1D}, 6));
+    }
+
     private void test7zUnarchive(File f, byte[] password) throws Exception {
         SevenZFile sevenZFile = new SevenZFile(f, password);
         try {