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 319a848 COMPRESS-554 : throw IOExcepiton if error is met 319a848 is described below commit 319a848ce71953ace6977f9b2dc505f24576addc Author: PeterAlfredLee <peteralfred...@gmail.com> AuthorDate: Tue Sep 1 15:16:53 2020 +0800 COMPRESS-554 : throw IOExcepiton if error is met Throw an decleared IOException if a null entry is met when reading a global pax header instead of a runtime NPE. --- src/changes/changes.xml | 7 ++++++- .../compress/archivers/tar/TarArchiveInputStream.java | 4 ++++ .../archivers/tar/TarArchiveInputStreamTest.java | 9 +++++++++ src/test/resources/COMPRESS-554.tar | Bin 0 -> 10842 bytes 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 3a3731d..c10d9d7 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -214,9 +214,14 @@ The <action> type attribute can be add,update,fix,remove. </action> <action issue="COMPRESS-548" type="fix" date="2020-08-24" due-to="Maksim Zuev" dev="PeterLee"> - Throw an exception when reading the zip extra field if the + Throw an IOException when reading the zip extra field if the length is too short. </action> + <action issue="COMPRESS-554" type="fix" date="2020-09-01" + due-to="Maksim Zuev" dev="PeterLee"> + Throw an decleared IOException if a null entry is met when + reading a global pax header instead of a runtime NPE. + </action> </release> <release version="1.20" date="2020-02-08" description="Release 1.20 (Java 7)"> 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 42aed57..62766f2 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 @@ -573,6 +573,10 @@ public class TarArchiveInputStream extends ArchiveInputStream { private void readGlobalPaxHeaders() throws IOException { globalPaxHeaders = parsePaxHeaders(this, globalSparseHeaders); getNextEntry(); // Get the actual file entry + + if (currEntry == null) { + throw new IOException("Error detected parsing the pax header"); + } } /** 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 924542f..17f4728 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 @@ -460,6 +460,15 @@ public class TarArchiveInputStreamTest extends AbstractTestCase { } } + @Test(expected = IOException.class) + public void stCompress554() throws IOException { + try (FileInputStream in = new FileInputStream(getFile("./COMPRESS-554.tar")); + TarArchiveInputStream archive = new TarArchiveInputStream(in)) { + while (archive.getNextTarEntry() != null) { + } + } + } + private TarArchiveInputStream getTestStream(final String name) { return new TarArchiveInputStream( TarArchiveInputStreamTest.class.getResourceAsStream(name)); diff --git a/src/test/resources/COMPRESS-554.tar b/src/test/resources/COMPRESS-554.tar new file mode 100644 index 0000000..71a6173 Binary files /dev/null and b/src/test/resources/COMPRESS-554.tar differ