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