Author: bodewig Date: Fri Feb 6 08:59:14 2009 New Revision: 741476 URL: http://svn.apache.org/viewvc?rev=741476&view=rev Log: use length of signature read when trying to match input stream formats
Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveInputStream.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java?rev=741476&r1=741475&r2=741476&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java Fri Feb 6 08:59:14 2009 @@ -82,18 +82,17 @@ input.mark(signature.length); int signatureLength = input.read(signature); // TODO if reset is not supported pass on the IOException or return null? - // TODO, what if we failed to read 12 bytes? input.reset(); - if(ZipArchiveInputStream.matches(signature)) { + if(ZipArchiveInputStream.matches(signature, signatureLength)) { return new ZipArchiveInputStream(input); - } else if(JarArchiveInputStream.matches(signature)) { + } else if(JarArchiveInputStream.matches(signature, signatureLength)) { return new JarArchiveInputStream(input); - } else if(TarArchiveInputStream.matches(signature)) { + } else if(TarArchiveInputStream.matches(signature, signatureLength)) { return new TarArchiveInputStream(input); - } else if(ArArchiveInputStream.matches(signature)) { + } else if(ArArchiveInputStream.matches(signature, signatureLength)) { return new ArArchiveInputStream(input); - } else if(CpioArchiveInputStream.matches(signature)) { + } else if(CpioArchiveInputStream.matches(signature, signatureLength)) { return new CpioArchiveInputStream(input); } return null; Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveInputStream.java?rev=741476&r1=741475&r2=741476&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveInputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveInputStream.java Fri Feb 6 08:59:14 2009 @@ -108,9 +108,12 @@ return ret; } - public static boolean matches( byte[] signature ) { + public static boolean matches(byte[] signature, int length) { // 3c21 7261 6863 0a3e + if (length < 8) { + return false; + } if (signature[0] != 0x21) { return false; } Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java?rev=741476&r1=741475&r2=741476&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.java Fri Feb 6 08:59:14 2009 @@ -442,9 +442,12 @@ return (ArchiveEntry)entry; } - public static boolean matches( byte[] signature ) { + public static boolean matches(byte[] signature, int length) { // 3037 3037 30 + if (length < 5) { + return false; + } if (signature[0] != 0x30) { return false; } Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java?rev=741476&r1=741475&r2=741476&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java Fri Feb 6 08:59:14 2009 @@ -40,9 +40,13 @@ } } - public static boolean matches( byte[] signature ) { + public static boolean matches(byte[] signature, int length ) { // 4b50 0403 0014 0008 + if (length < 8) { + return false; + } + if (signature[0] != 0x50) { return false; } Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java?rev=741476&r1=741475&r2=741476&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java Fri Feb 6 08:59:14 2009 @@ -44,9 +44,13 @@ return in.read(); } - public static boolean matches( byte[] signature ) { + public static boolean matches(byte[] signature, int length) { // 6574 7473 2e31 6d78 + if (length < 8) { + return false; + } + if (signature[0] != 0x74) { return false; } Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java?rev=741476&r1=741475&r2=741476&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java Fri Feb 6 08:59:14 2009 @@ -53,6 +53,10 @@ public static boolean matches( byte[] signature, int length ) { // 4b50 0403 0014 0000 + if (length < 8) { + return false; + } + if (signature[0] != 0x50) { return false; }