You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2013/01/27 17:36:52 UTC
svn commit: r1439115 -
/ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java
Author: bodewig
Date: Sun Jan 27 16:36:52 2013
New Revision: 1439115
URL: http://svn.apache.org/viewvc?rev=1439115&view=rev
Log:
don't search beyond the start of the archive
Modified:
ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java
Modified: ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java?rev=1439115&r1=1439114&r2=1439115&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java Sun Jan 27 16:36:52 2013
@@ -667,13 +667,19 @@ public class ZipFile {
private void positionAtCentralDirectory()
throws IOException {
positionAtEndOfCentralDirectoryRecord();
- archive.seek(archive.getFilePointer() - ZIP64_EOCDL_LENGTH);
- archive.readFully(WORD_BUF);
- boolean found = Arrays.equals(ZipOutputStream.ZIP64_EOCD_LOC_SIG,
- WORD_BUF);
+ boolean found = false;
+ boolean searchedForZip64EOCD =
+ archive.getFilePointer() > ZIP64_EOCDL_LENGTH;
+ if (searchedForZip64EOCD) {
+ archive.seek(archive.getFilePointer() - ZIP64_EOCDL_LENGTH);
+ archive.readFully(WORD_BUF);
+ found = Arrays.equals(ZipOutputStream.ZIP64_EOCD_LOC_SIG, WORD_BUF);
+ }
if (!found) {
// not a ZIP64 archive
- skipBytes(ZIP64_EOCDL_LENGTH - WORD);
+ if (searchedForZip64EOCD) {
+ skipBytes(ZIP64_EOCDL_LENGTH - WORD);
+ }
positionAtCentralDirectory32();
} else {
positionAtCentralDirectory64();