Author: bodewig
Date: Wed Mar 17 15:55:00 2010
New Revision: 924342

URL: http://svn.apache.org/viewvc?rev=924342&view=rev
Log:
STORED entry with data descriptors are not a problem for ZipFile and the output 
stream doesn't care anyway - so only check for the combination inside the input 
stream.

Modified:
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java?rev=924342&r1=924341&r2=924342&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
 Wed Mar 17 15:55:00 2010
@@ -197,7 +197,10 @@ public class ZipArchiveInputStream exten
      */
     public boolean canReadEntryData(ArchiveEntry ae) {
         if (ae instanceof ZipArchiveEntry) {
-            return ZipUtil.canHandleEntryData((ZipArchiveEntry) ae);
+            ZipArchiveEntry ze = (ZipArchiveEntry) ae;
+            return ZipUtil.canHandleEntryData(ze)
+                && supportsDataDescriptorFor(ze);
+
         }
         return false;
     }
@@ -214,6 +217,12 @@ public class ZipArchiveInputStream exten
         if (start <= buffer.length && length >= 0 && start >= 0
             && buffer.length - start >= length) {
             ZipUtil.checkRequestedFeatures(current);
+            if (!supportsDataDescriptorFor(current)) {
+                throw new 
UnsupportedZipFeatureException(UnsupportedZipFeatureException
+                                                         .Feature
+                                                         .DATA_DESCRIPTOR,
+                                                         current);
+            }
 
             if (current.getMethod() == ZipArchiveOutputStream.STORED) {
                 int csize = (int) current.getSize();
@@ -419,4 +428,15 @@ public class ZipArchiveInputStream exten
         current.setSize(new ZipLong(b).getValue());
     }
 
+    /**
+     * Whether this entry requires a data descriptor this library can work 
with.
+     *
+     * @return true if the entry doesn't require any data descriptor
+     * or the method is DEFLATED).
+     */
+    private static boolean supportsDataDescriptorFor(ZipArchiveEntry entry) {
+        return !entry.getGeneralPurposeBit().usesDataDescriptor()
+            || entry.getMethod() == ZipArchiveEntry.DEFLATED;
+    }
+
 }

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java?rev=924342&r1=924341&r2=924342&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java
 Wed Mar 17 15:55:00 2010
@@ -184,8 +184,7 @@ public abstract class ZipUtil {
      * Whether this library is able to read or write the given entry.
      */
     static boolean canHandleEntryData(ZipArchiveEntry entry) {
-        return supportsEncryptionOf(entry) && supportsMethodOf(entry)
-            && supportsDataDescriptorFor(entry);
+        return supportsEncryptionOf(entry) && supportsMethodOf(entry);
     }
 
     /**
@@ -210,17 +209,6 @@ public abstract class ZipUtil {
     }
 
     /**
-     * Whether this entry requires a data descriptor this library can work 
with.
-     *
-     * @return true if the entry doesn't require any data descriptor
-     * or the method is DEFLATED).
-     */
-    private static boolean supportsDataDescriptorFor(ZipArchiveEntry entry) {
-        return !entry.getGeneralPurposeBit().usesDataDescriptor()
-            || entry.getMethod() == ZipArchiveEntry.DEFLATED;
-    }
-
-    /**
      * Checks whether the entry requires features not (yet) supported
      * by the library and throws an exception if it does.
      */
@@ -236,10 +224,5 @@ public abstract class ZipUtil {
                 new 
UnsupportedZipFeatureException(UnsupportedZipFeatureException
                                                    .Feature.METHOD, ze);
         }
-        if (!supportsDataDescriptorFor(ze)) {
-            throw
-                new 
UnsupportedZipFeatureException(UnsupportedZipFeatureException
-                                                   .Feature.DATA_DESCRIPTOR, 
ze);
-        }
     }
 }
\ No newline at end of file


Reply via email to