You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by pe...@apache.org on 2020/05/27 12:49:59 UTC

[commons-compress] branch master updated: Revert "COMPRESS-529 : throws IOException if non-number exists in pax header"

This is an automated email from the ASF dual-hosted git repository.

peterlee pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git


The following commit(s) were added to refs/heads/master by this push:
     new 8d969d6  Revert "COMPRESS-529 : throws IOException if non-number exists in pax header"
8d969d6 is described below

commit 8d969d60536b8878f73fd494c517de5d18be9d89
Author: PeterAlfredLee <pe...@gmail.com>
AuthorDate: Wed May 27 20:44:12 2020 +0800

    Revert "COMPRESS-529 : throws IOException if non-number exists in pax header"
    
    This reverts commit b8a0b54c59191cb8338585eab055897737730a9e.
---
 src/changes/changes.xml                            |   4 -
 .../compress/archivers/tar/TarArchiveEntry.java    | 115 ++++++++++-----------
 .../archivers/tar/TarArchiveInputStream.java       |   3 +-
 .../archivers/tar/TarArchiveInputStreamTest.java   |   9 --
 src/test/resources/COMPRESS-529.tar                | Bin 1536 -> 0 bytes
 5 files changed, 53 insertions(+), 78 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ec51a84..b970000 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -96,10 +96,6 @@ The <action> type attribute can be add,update,fix,remove.
         ZipFIle to make it a more specific exception.
         Github Pull Request #102.
       </action>
-      <action issue="COMPRESS-529" type="fix" date="2020-05-26">
-        Throws IOException with more specific info when parsing a
-        non-number value while parsing pax headers.
-      </action>
       <action issue="COMPRESS-530" type="fix" date="2020-05-26">
         Skip non-number chars while parsing pax headers.
       </action>
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
index 87acace..f180780 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
@@ -1063,14 +1063,12 @@ public class TarArchiveEntry implements ArchiveEntry, TarConstants {
     /**
      * add a PAX header to this entry. If the header corresponds to an existing field in the entry,
      * that field will be set; otherwise the header will be added to the extraPaxHeaders Map
-     *
      * @param name  The full name of the header to set.
      * @param value value of header.
-     * @throws IOException if error occurs when parsing pax header
      * @since 1.15
      */
-    public void addPaxHeader(String name, String value) throws IOException {
-        processPaxHeader(name, value);
+    public void addPaxHeader(String name,String value) {
+         processPaxHeader(name,value);
     }
 
     /**
@@ -1085,12 +1083,10 @@ public class TarArchiveEntry implements ArchiveEntry, TarConstants {
 
     /**
      * Update the entry using a map of pax headers.
-     *
      * @param headers
-     * @throws IOException if error occurs when parsing pax header
      * @since 1.15
      */
-    void updateEntryFromPaxHeaders(Map<String, String> headers) throws IOException {
+    void updateEntryFromPaxHeaders(Map<String, String> headers) {
         for (final Map.Entry<String, String> ent : headers.entrySet()) {
             final String key = ent.getKey();
             final String val = ent.getValue();
@@ -1101,13 +1097,11 @@ public class TarArchiveEntry implements ArchiveEntry, TarConstants {
     /**
      * process one pax header, using the entries extraPaxHeaders map as source for extra headers
      * used when handling entries for sparse files.
-     *
      * @param key
      * @param val
-     * @throws IOException if error occurs when parsing pax header
      * @since 1.15
      */
-    private void processPaxHeader(String key, String val) throws IOException {
+    private void processPaxHeader(String key, String val) {
         processPaxHeader(key,val,extraPaxHeaders);
     }
 
@@ -1115,13 +1109,12 @@ public class TarArchiveEntry implements ArchiveEntry, TarConstants {
      * Process one pax header, using the supplied map as source for extra headers to be used when handling
      * entries for sparse files
      *
-     * @param key     the header name.
-     * @param val     the header value.
-     * @param headers map of headers used for dealing with sparse file.
-     * @throws IOException if error occurs when parsing pax header
+     * @param key  the header name.
+     * @param val  the header value.
+     * @param headers  map of headers used for dealing with sparse file.
      * @since 1.15
      */
-    private void processPaxHeader(String key, String val, Map<String, String> headers) throws IOException {
+    private void processPaxHeader(String key, String val, Map<String, String> headers) {
     /*
      * The following headers are defined for Pax.
      * atime, ctime, charset: cannot use these without changing TarArchiveEntry fields
@@ -1142,54 +1135,50 @@ public class TarArchiveEntry implements ArchiveEntry, TarConstants {
      *
      * If called from addExtraPaxHeader, these additional headers must be already present .
      */
-        try {
-            switch (key) {
-                case "path":
-                    setName(val);
-                    break;
-                case "linkpath":
-                    setLinkName(val);
-                    break;
-                case "gid":
-                    setGroupId(Long.parseLong(val));
-                    break;
-                case "gname":
-                    setGroupName(val);
-                    break;
-                case "uid":
-                    setUserId(Long.parseLong(val));
-                    break;
-                case "uname":
-                    setUserName(val);
-                    break;
-                case "size":
-                    setSize(Long.parseLong(val));
-                    break;
-                case "mtime":
-                    setModTime((long) (Double.parseDouble(val) * 1000));
-                    break;
-                case "SCHILY.devminor":
-                    setDevMinor(Integer.parseInt(val));
-                    break;
-                case "SCHILY.devmajor":
-                    setDevMajor(Integer.parseInt(val));
-                    break;
-                case "GNU.sparse.size":
-                    fillGNUSparse0xData(headers);
-                    break;
-                case "GNU.sparse.realsize":
-                    fillGNUSparse1xData(headers);
-                    break;
-                case "SCHILY.filetype":
-                    if ("sparse".equals(val)) {
-                        fillStarSparseData(headers);
-                    }
-                    break;
-                default:
-                    extraPaxHeaders.put(key, val);
-            }
-        } catch (NumberFormatException e) {
-            throw new IOException("Error occurs when parsing " + key + " in pax header : " + val + " is not a number", e);
+        switch (key) {
+            case "path":
+                setName(val);
+                break;
+            case "linkpath":
+                setLinkName(val);
+                break;
+            case "gid":
+                setGroupId(Long.parseLong(val));
+                break;
+            case "gname":
+                setGroupName(val);
+                break;
+            case "uid":
+                setUserId(Long.parseLong(val));
+                break;
+            case "uname":
+                setUserName(val);
+                break;
+            case "size":
+                setSize(Long.parseLong(val));
+                break;
+            case "mtime":
+                setModTime((long) (Double.parseDouble(val) * 1000));
+                break;
+            case "SCHILY.devminor":
+                setDevMinor(Integer.parseInt(val));
+                break;
+            case "SCHILY.devmajor":
+                setDevMajor(Integer.parseInt(val));
+                break;
+            case "GNU.sparse.size":
+                fillGNUSparse0xData(headers);
+                break;
+            case "GNU.sparse.realsize":
+                fillGNUSparse1xData(headers);
+                break;
+            case "SCHILY.filetype":
+                if ("sparse".equals(val)) {
+                    fillStarSparseData(headers);
+                }
+                break;
+            default:
+                extraPaxHeaders.put(key,val);
         }
     }
 
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
index 846a116..45f6b89 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
@@ -765,8 +765,7 @@ public class TarArchiveInputStream extends ArchiveInputStream {
         return headers;
     }
 
-    private void applyPaxHeadersToCurrentEntry(final Map<String, String> headers,
-                                               final List<TarArchiveStructSparse> sparseHeaders) throws IOException {
+    private void applyPaxHeadersToCurrentEntry(final Map<String, String> headers, final List<TarArchiveStructSparse> sparseHeaders) {
         currEntry.updateEntryFromPaxHeaders(headers);
         currEntry.setSparseHeaders(sparseHeaders);
     }
diff --git a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
index c3fcc01..095ec2c 100644
--- a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
@@ -425,15 +425,6 @@ public class TarArchiveInputStreamTest extends AbstractTestCase {
     }
 
     @Test(expected = IOException.class)
-    public void testParseTarWithNonNumberPaxHeaders() throws IOException {
-        try (FileInputStream in = new FileInputStream(getFile("COMPRESS-529.tar"));
-             TarArchiveInputStream archive = new TarArchiveInputStream(in)) {
-            archive.getNextEntry();
-            IOUtils.toByteArray(archive);
-        }
-    }
-
-    @Test(expected = IOException.class)
     public void testParseTarWithSpecialPaxHeaders() throws IOException {
         try (FileInputStream in = new FileInputStream(getFile("COMPRESS-530.tar"));
              TarArchiveInputStream archive = new TarArchiveInputStream(in)) {
diff --git a/src/test/resources/COMPRESS-529.tar b/src/test/resources/COMPRESS-529.tar
deleted file mode 100644
index 351908d..0000000
Binary files a/src/test/resources/COMPRESS-529.tar and /dev/null differ