Index: src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
===================================================================
--- src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java	(revision 1433819)
+++ src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java	(working copy)
@@ -666,11 +666,19 @@
      */
     private void positionAtCentralDirectory()
         throws IOException {
-        boolean found = tryToLocateSignature(MIN_EOCD_SIZE + ZIP64_EOCDL_LENGTH,
-                                             MAX_EOCD_SIZE + ZIP64_EOCDL_LENGTH,
-                                             ZipArchiveOutputStream
-                                             .ZIP64_EOCD_LOC_SIG);
+        boolean found = tryToLocateSignature(MIN_EOCD_SIZE, MAX_EOCD_SIZE,
+                                             ZipArchiveOutputStream.EOCD_SIG);
+
         if (!found) {
+            throw new ZipException("archive is not a ZIP archive");
+        }
+
+        // Having found EOCD, Zip64 EOCDL can only be in front if it exists.
+        long distanceToZip64Eocdl =
+                archive.length() - archive.getFilePointer() + ZIP64_EOCDL_LENGTH;
+        found = tryToLocateSignature(distanceToZip64Eocdl, distanceToZip64Eocdl,
+                                     ZipArchiveOutputStream.ZIP64_EOCD_LOC_SIG);
+        if (!found) {
             // not a ZIP64 archive
             positionAtCentralDirectory32();
         } else {
