Browse Source

Allo zip to store files with size between 2GB and 4GB

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277688 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 20 years ago
parent
commit
2a7681820f
3 changed files with 30 additions and 3 deletions
  1. +3
    -0
      WHATSNEW
  2. +17
    -2
      src/main/org/apache/tools/zip/ZipOutputStream.java
  3. +10
    -1
      src/testcases/org/apache/tools/zip/ZipOutputStreamTest.java

+ 3
- 0
WHATSNEW View File

@@ -325,6 +325,9 @@ Fixed bugs:
* <zip>'s defaultexcludes attribute was ignored when an archive was
updated. Bugzilla Report 33412.

* <zip> couldn't store files with size between 2GB and 4GB (the
upper limit set by the ZIP format itself). Bugzilla Report 33310.

Changes from Ant 1.6.1 to Ant 1.6.2
===================================



+ 17
- 2
src/main/org/apache/tools/zip/ZipOutputStream.java View File

@@ -336,8 +336,8 @@ public class ZipOutputStream extends FilterOutputStream {
deflate();
}

entry.setSize(def.getTotalIn());
entry.setComprSize(def.getTotalOut());
entry.setSize(adjustToLong(def.getTotalIn()));
entry.setComprSize(adjustToLong(def.getTotalOut()));
entry.setCrc(realCrc);

def.reset();
@@ -877,4 +877,19 @@ public class ZipOutputStream extends FilterOutputStream {
out.write(data, offset, length);
}
}

/**
* Assumes a negative integer really is a positive integer that
* has wrapped around and re-creates the original value.
*
* @since 1.34
*/
protected static long adjustToLong(int i) {
if (i < 0) {
return 2 * ((long) Integer.MAX_VALUE) + 2 + i;
} else {
return i;
}
}

}

+ 10
- 1
src/testcases/org/apache/tools/zip/ZipOutputStreamTest.java View File

@@ -1,5 +1,5 @@
/*
* Copyright 2004 The Apache Software Foundation
* Copyright 2004-2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -66,4 +66,13 @@ public class ZipOutputStreamTest extends TestCase {
assertEquals(test.getValue(), zl.getValue());
}

public void testAdjustToLong() {
assertEquals((long) Integer.MAX_VALUE,
ZipOutputStream.adjustToLong(Integer.MAX_VALUE));
assertEquals(((long) Integer.MAX_VALUE) + 1,
ZipOutputStream.adjustToLong(Integer.MAX_VALUE + 1));
assertEquals(2 * ((long) Integer.MAX_VALUE),
ZipOutputStream.adjustToLong(2 * Integer.MAX_VALUE));
}

}

Loading…
Cancel
Save