diff -ur apache-ant-1.7.1/src/main/org/apache/tools/tar/TarEntry.java apache-ant-1.7.1-patched/src/main/org/apache/tools/tar/TarEntry.java
--- apache-ant-1.7.1/src/main/org/apache/tools/tar/TarEntry.java	2008-06-27 05:05:20.000000000 -0500
+++ apache-ant-1.7.1-patched/src/main/org/apache/tools/tar/TarEntry.java	2009-05-04 10:33:03.000000000 -0500
@@ -595,6 +595,11 @@
         while (offset < outbuf.length) {
             outbuf[offset++] = 0;
         }
+		
+		// this sets the real size if the size is bigger than the 8GB barrier
+        if (size > MAXSIZE){ 
+            offset = TarUtils.setBigSize(size, outbuf, 124, SIZELEN);
+        }
 
         long chk = TarUtils.computeCheckSum(outbuf);
 
diff -ur apache-ant-1.7.1/src/main/org/apache/tools/tar/TarUtils.java apache-ant-1.7.1-patched/src/main/org/apache/tools/tar/TarUtils.java
--- apache-ant-1.7.1/src/main/org/apache/tools/tar/TarUtils.java	2008-06-27 05:05:22.000000000 -0500
+++ apache-ant-1.7.1-patched/src/main/org/apache/tools/tar/TarUtils.java	2009-05-04 10:29:40.000000000 -0500
@@ -23,6 +23,8 @@
 
 package org.apache.tools.tar;
 
+import java.math.BigInteger;
+
 /**
  * This class provides static utility methods to work with byte streams.
  *
@@ -203,4 +205,31 @@
 
         return sum;
     }
+	
+    /**
+     * Set size using binary for files greater than 8 GB just like GNU tar
+     *
+     * @param value Thefile size if > 8GB
+     * @param buf The buffer from which to parse.
+     * @param offset The offset into the buffer from which to parse.
+     * @param length The number of header bytes to parse.
+     * @return The integer value of the octal bytes.
+     */
+    public static int setBigSize(long value, byte[] buf, int offset, int length) {
+        byte[] result = new byte[ length ];
+        
+        BigInteger Rsize=new BigInteger(""+value);
+        byte[] last=new byte[12];
+        byte[] copier=Rsize.toByteArray();
+        for(int i=0;i<copier.length;i++){
+            last[last.length-copier.length+i]=copier[i];
+        }
+        last[0]=(byte)128;
+
+        for (int i=0 ; i <last.length ; i++ ) {
+            buf[ offset + i ] = last[i];
+        }
+        return offset + length;
+    }
+  
 }
