jkf         2005/06/06 15:18:27

  Modified:    src/main/org/apache/tools/ant/taskdefs Tar.java
               src/main/org/apache/tools/tar TarOutputStream.java
                        TarInputStream.java TarConstants.java
               .        WHATSNEW
  Log:
  PR: 34241
  Tar task now accepts files <8GB (was <2GB), according to POSIX tar standard.
  
  Revision  Changes    Path
  1.55      +5 -0      ant/src/main/org/apache/tools/ant/taskdefs/Tar.java
  
  Index: Tar.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Tar.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- Tar.java  12 Nov 2004 15:14:59 -0000      1.54
  +++ Tar.java  6 Jun 2005 22:18:27 -0000       1.55
  @@ -371,6 +371,11 @@
               TarEntry te = new TarEntry(vPath);
               te.setModTime(file.lastModified());
               if (!file.isDirectory()) {
  +                if (file.length() > TarConstants.MAXSIZE)
  +                {
  +                    throw new BuildException("File: " + file + " larger than 
" +
  +                            TarConstants.MAXSIZE + " bytes.");
  +                }
                   te.setSize(file.length());
                   te.setMode(tarFileSet.getMode());
               } else {
  
  
  
  1.20      +3 -3      ant/src/main/org/apache/tools/tar/TarOutputStream.java
  
  Index: TarOutputStream.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/tar/TarOutputStream.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- TarOutputStream.java      11 Jan 2005 18:41:21 -0000      1.19
  +++ TarOutputStream.java      6 Jun 2005 22:18:27 -0000       1.20
  @@ -43,8 +43,8 @@
       public static final int LONGFILE_GNU = 2;
   
       protected boolean   debug;
  -    protected int       currSize;
  -    protected int       currBytes;
  +    protected long      currSize;
  +    protected long      currBytes;
       protected byte[]    oneBuf;
       protected byte[]    recordBuf;
       protected int       assemLen;
  @@ -189,7 +189,7 @@
           if (entry.isDirectory()) {
               this.currSize = 0;
           } else {
  -            this.currSize = (int) entry.getSize();
  +            this.currSize = entry.getSize();
           }
       }
   
  
  
  
  1.20      +12 -8     ant/src/main/org/apache/tools/tar/TarInputStream.java
  
  Index: TarInputStream.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/tar/TarInputStream.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- TarInputStream.java       21 Mar 2005 10:05:42 -0000      1.19
  +++ TarInputStream.java       6 Jun 2005 22:18:27 -0000       1.20
  @@ -38,8 +38,8 @@
   
       protected boolean debug;
       protected boolean hasHitEOF;
  -    protected int entrySize;
  -    protected int entryOffset;
  +    protected long entrySize;
  +    protected long entryOffset;
       protected byte[] readBuf;
       protected TarBuffer buffer;
       protected TarEntry currEntry;
  @@ -119,13 +119,18 @@
        * is left in the entire archive, only in the current entry.
        * This value is determined from the entry's size header field
        * and the amount of data already read from the current entry.
  -     *
  +     * Integer.MAX_VALUE is returen in case more than Integer.MAX_VALUE
  +     * bytes are left in the current entry in the archive.
        *
        * @return The number of available bytes for the current entry.
        * @throws IOException for signature
        */
       public int available() throws IOException {
  -        return this.entrySize - this.entryOffset;
  +        if (this.entrySize - this.entryOffset > Integer.MAX_VALUE)
  +        {
  +            return Integer.MAX_VALUE;
  +        }
  +        return (int) (this.entrySize - this.entryOffset);
       }
   
       /**
  @@ -198,7 +203,7 @@
           }
   
           if (this.currEntry != null) {
  -            int numToSkip = this.entrySize - this.entryOffset;
  +            long numToSkip = this.entrySize - this.entryOffset;
   
               if (this.debug) {
                   System.err.println("TarInputStream: SKIP currENTRY '"
  @@ -249,8 +254,7 @@
   
               this.entryOffset = 0;
   
  -            // REVIEW How do we resolve this discrepancy?!
  -            this.entrySize = (int) this.currEntry.getSize();
  +            this.entrySize = this.currEntry.getSize();
           }
   
           if (this.currEntry != null && this.currEntry.isGNULongNameEntry()) {
  @@ -308,7 +312,7 @@
           }
   
           if ((numToRead + this.entryOffset) > this.entrySize) {
  -            numToRead = (this.entrySize - this.entryOffset);
  +            numToRead = (int) (this.entrySize - this.entryOffset);
           }
   
           if (this.readBuf != null) {
  
  
  
  1.14      +5 -0      ant/src/main/org/apache/tools/tar/TarConstants.java
  
  Index: TarConstants.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/tar/TarConstants.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- TarConstants.java 9 Mar 2004 16:48:55 -0000       1.13
  +++ TarConstants.java 6 Jun 2005 22:18:27 -0000       1.14
  @@ -58,6 +58,11 @@
        * The length of the size field in a header buffer.
        */
       int    SIZELEN = 12;
  +    
  +    /**
  +     * The maximum size of a file in a tar archive (That's 11 sevens, octal).
  +     */
  +    long   MAXSIZE = 077777777777L;
   
       /**
        * The length of the magic field in a header buffer.
  
  
  
  1.839     +3 -0      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.838
  retrieving revision 1.839
  diff -u -r1.838 -r1.839
  --- WHATSNEW  2 Jun 2005 13:58:33 -0000       1.838
  +++ WHATSNEW  6 Jun 2005 22:18:27 -0000       1.839
  @@ -109,6 +109,9 @@
   
   * <xmlvalidate> and <schemavalidate> create a new parser for every file in a
     fileset, and so validate multiple files properly. Bugzilla Report 32791
  +  
  +* <tar> / <untar> now accepts files upto 8GB, <tar> gives an error if larger 
  +  files are to be included. This is the POSIX size limit.
   
   Other changes:
   --------------
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to