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

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

commit 24193630a2ce688226072998d17392f511b250ba
Author: Gary Gregory <[email protected]>
AuthorDate: Fri Sep 30 08:40:53 2022 -0400

    Replace anti-pattern of throwing RuntimeException with more precise
    runtime exceptions
---
 .../compress/archivers/zip/AsiExtraField.java      |   2 +-
 .../compress/archivers/zip/ExtraFieldUtils.java    |   6 +-
 .../compress/archivers/zip/GeneralPurposeBit.java  |   2 +-
 .../archivers/zip/ParallelScatterZipCreator.java   |  13 +--
 .../compress/archivers/zip/ZipArchiveEntry.java    |  36 ++++----
 .../commons/compress/archivers/zip/ZipLong.java    |   2 +-
 .../commons/compress/archivers/zip/ZipShort.java   |   2 +-
 .../pack200/Pack200CompressorInputStream.java      |   5 +-
 .../commons/compress/harmony/pack200/BandSet.java  |   4 +-
 .../commons/compress/harmony/pack200/BcBands.java  |   6 +-
 .../compress/harmony/pack200/ClassBands.java       |   8 +-
 .../harmony/pack200/NewAttributeBands.java         |   3 +-
 .../compress/harmony/pack200/PackingOptions.java   |   2 +-
 .../compress/harmony/pack200/PackingUtils.java     |   4 +-
 .../commons/compress/harmony/pack200/Segment.java  |  12 +--
 .../FileBasedScatterGatherBackingStore.java        |   3 +-
 .../apache/commons/compress/ArchiveReadTest.java   |   2 +-
 .../commons/compress/archivers/LongPathTest.java   |   2 +-
 .../compress/archivers/LongSymLinkTest.java        |   2 +-
 .../compress/archivers/zip/ZipFileTest.java        |  96 ++++++++++-----------
 .../harmony/unpack200/tests/Compress626Test.java   |  55 ++++++++++++
 .../compress/COMPRESS-626/compress-626-pack200.jar | Bin 0 -> 781 bytes
 22 files changed, 159 insertions(+), 108 deletions(-)

diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java 
b/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
index a487bc39..6f6a1b76 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
@@ -342,7 +342,7 @@ public class AsiExtraField implements ZipExtraField, 
UnixStat, Cloneable {
             return cloned;
         } catch (final CloneNotSupportedException cnfe) {
             // impossible
-            throw new RuntimeException(cnfe); //NOSONAR
+            throw new IllegalStateException(cnfe); //NOSONAR
         }
     }
 }
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java 
b/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
index 89086283..699754b9 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
@@ -68,11 +68,11 @@ public class ExtraFieldUtils {
             final ZipExtraField ze = (ZipExtraField) c.newInstance();
             implementations.put(ze.getHeaderId(), c);
         } catch (final ClassCastException cc) { // NOSONAR
-            throw new RuntimeException(c + " doesn't implement 
ZipExtraField"); //NOSONAR
+            throw new IllegalArgumentException(c + " doesn't implement 
ZipExtraField"); //NOSONAR
         } catch (final InstantiationException ie) { // NOSONAR
-            throw new RuntimeException(c + " is not a concrete class"); 
//NOSONAR
+            throw new IllegalArgumentException(c + " is not a concrete 
class"); //NOSONAR
         } catch (final IllegalAccessException ie) { // NOSONAR
-            throw new RuntimeException(c + "'s no-arg constructor is not 
public"); //NOSONAR
+            throw new IllegalArgumentException(c + "'s no-arg constructor is 
not public"); //NOSONAR
         }
     }
 
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java
 
b/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java
index e87f661e..9e00009e 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/GeneralPurposeBit.java
@@ -239,7 +239,7 @@ public final class GeneralPurposeBit implements Cloneable {
             return super.clone();
         } catch (final CloneNotSupportedException ex) {
             // impossible
-            throw new RuntimeException("GeneralPurposeBit is not Cloneable?", 
ex); //NOSONAR
+            throw new IllegalStateException("GeneralPurposeBit is not 
Cloneable?", ex); //NOSONAR
         }
     }
 }
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java
 
b/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java
index 5ed7eb34..99353dcd 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java
@@ -17,12 +17,10 @@
  */
 package org.apache.commons.compress.archivers.zip;
 
-import org.apache.commons.compress.parallel.FileBasedScatterGatherBackingStore;
-import org.apache.commons.compress.parallel.InputStreamSupplier;
-import org.apache.commons.compress.parallel.ScatterGatherBackingStore;
-import org.apache.commons.compress.parallel.ScatterGatherBackingStoreSupplier;
+import static 
org.apache.commons.compress.archivers.zip.ZipArchiveEntryRequest.createZipArchiveEntryRequest;
 
 import java.io.IOException;
+import java.io.UncheckedIOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Deque;
@@ -36,7 +34,10 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.zip.Deflater;
 
-import static 
org.apache.commons.compress.archivers.zip.ZipArchiveEntryRequest.createZipArchiveEntryRequest;
+import org.apache.commons.compress.parallel.FileBasedScatterGatherBackingStore;
+import org.apache.commons.compress.parallel.InputStreamSupplier;
+import org.apache.commons.compress.parallel.ScatterGatherBackingStore;
+import org.apache.commons.compress.parallel.ScatterGatherBackingStoreSupplier;
 
 /**
  * Creates a zip in parallel by using multiple threadlocal {@link 
ScatterZipOutputStream} instances.
@@ -88,7 +89,7 @@ public class ParallelScatterZipCreator {
                 streams.add(scatterStream);
                 return scatterStream;
             } catch (final IOException e) {
-                throw new RuntimeException(e); //NOSONAR
+                throw new UncheckedIOException(e); //NOSONAR
             }
         }
     };
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
index a1c0f8a4..0186f4ab 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
@@ -696,16 +696,15 @@ public class ZipArchiveEntry extends 
java.util.zip.ZipEntry
      * @throws RuntimeException on error
      */
     @Override
-    public void setExtra(final byte[] extra) throws RuntimeException {
-        try {
-            final ZipExtraField[] local = ExtraFieldUtils.parse(extra, true, 
ExtraFieldParsingMode.BEST_EFFORT);
-            mergeExtraFields(local, true);
-        } catch (final ZipException e) {
-            // actually this is not possible as of Commons Compress 1.1
-            throw new RuntimeException("Error parsing extra fields for entry: 
" //NOSONAR
-                                       + getName() + " - " + e.getMessage(), 
e);
-        }
-    }
+       public void setExtra(final byte[] extra) throws RuntimeException {
+               try {
+                       mergeExtraFields(ExtraFieldUtils.parse(extra, true, 
ExtraFieldParsingMode.BEST_EFFORT), true);
+               } catch (final ZipException e) {
+                       // actually this is not possible as of Commons Compress 
1.1
+                       throw new IllegalArgumentException("Error parsing extra 
fields for entry: " // NOSONAR
+                                       + getName() + " - " + e.getMessage(), 
e);
+               }
+       }
 
     /**
      * Unfortunately {@link java.util.zip.ZipOutputStream
@@ -721,15 +720,14 @@ public class ZipArchiveEntry extends 
java.util.zip.ZipEntry
      * Sets the central directory part of extra fields.
      * @param b an array of bytes to be parsed into extra fields
      */
-    public void setCentralDirectoryExtra(final byte[] b) {
-        try {
-            final ZipExtraField[] central = ExtraFieldUtils.parse(b, false, 
ExtraFieldParsingMode.BEST_EFFORT);
-            mergeExtraFields(central, false);
-        } catch (final ZipException e) {
-            // actually this is not possible as of Commons Compress 1.19
-            throw new RuntimeException(e.getMessage(), e); //NOSONAR
-        }
-    }
+       public void setCentralDirectoryExtra(final byte[] b) {
+               try {
+                       mergeExtraFields(ExtraFieldUtils.parse(b, false, 
ExtraFieldParsingMode.BEST_EFFORT), false);
+               } catch (final ZipException e) {
+                       // actually this is not possible as of Commons Compress 
1.19
+                       throw new IllegalArgumentException(e.getMessage(), e); 
// NOSONAR
+               }
+       }
 
     /**
      * Retrieves the extra data for the local file data.
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java
index cab0ecb1..0b179eff 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java
@@ -205,7 +205,7 @@ public final class ZipLong implements Cloneable, 
Serializable {
             return super.clone();
         } catch (final CloneNotSupportedException cnfe) {
             // impossible
-            throw new RuntimeException(cnfe); //NOSONAR
+            throw new IllegalStateException(cnfe); //NOSONAR
         }
     }
 
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java
index 93d4bedc..3bba7d35 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java
@@ -150,7 +150,7 @@ public final class ZipShort implements Cloneable, 
Serializable {
             return super.clone();
         } catch (final CloneNotSupportedException cnfe) {
             // impossible
-            throw new RuntimeException(cnfe); //NOSONAR
+            throw new IllegalStateException(cnfe); //NOSONAR
         }
     }
 
diff --git 
a/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java
 
b/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java
index be555581..a9fdbf11 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.java
@@ -22,11 +22,12 @@ package org.apache.commons.compress.compressors.pack200;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UncheckedIOException;
 import java.util.Map;
 import java.util.jar.JarOutputStream;
-import org.apache.commons.compress.java.util.jar.Pack200;
 
 import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.java.util.jar.Pack200;
 import org.apache.commons.compress.utils.CloseShieldFilterInputStream;
 import org.apache.commons.compress.utils.IOUtils;
 
@@ -223,7 +224,7 @@ public class Pack200CompressorInputStream extends 
CompressorInputStream {
         try {
             streamBridge.getInput().mark(limit);
         } catch (final IOException ex) {
-            throw new RuntimeException(ex); //NOSONAR
+            throw new UncheckedIOException(ex); //NOSONAR
         }
     }
 
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java 
b/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java
index cf3758b3..96aa2415 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java
@@ -586,7 +586,7 @@ public abstract class BandSet {
         for (int i = 0; i < array.length; i++) {
             array[i] = list.get(i).getIndex();
             if (array[i] < 0) {
-                throw new RuntimeException("Index should be > 0");
+                throw new IllegalArgumentException("Index should be > 0");
             }
         }
         return array;
@@ -604,7 +604,7 @@ public abstract class BandSet {
             final ConstantPoolEntry cpEntry = theList.get(j);
             array[j] = cpEntry == null ? 0 : cpEntry.getIndex() + 1;
             if (cpEntry != null && cpEntry.getIndex() < 0) {
-                throw new RuntimeException("Index should be > 0");
+                throw new IllegalArgumentException("Index should be > 0");
             }
         }
         return array;
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java 
b/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java
index 573931ca..c36c5ca2 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java
@@ -221,7 +221,7 @@ public class BcBands extends BandSet {
         }
         if (renumberedOffset != 0) {
             if (renumberedOffset + 1 != bciRenumbering.size()) {
-                throw new RuntimeException("Mistake made with renumbering");
+                throw new IllegalStateException("Mistake made with 
renumbering");
             }
             for (int i = bcLabel.size() - 1; i >= 0; i--) {
                 final Object label = bcLabel.get(i);
@@ -309,7 +309,7 @@ public class BcBands extends BandSet {
 
     public void visitInsn(final int opcode) {
         if (opcode >= 202) {
-            throw new RuntimeException("Non-standard bytecode instructions not 
supported");
+            throw new IllegalArgumentException("Non-standard bytecode 
instructions not supported");
         }
         bcCodes.add(opcode);
         byteCodeOffset++;
@@ -363,7 +363,7 @@ public class BcBands extends BandSet {
                 bcCodes.add(236); // cldc
                 bcClassRef.add(constant);
             } else {
-                throw new RuntimeException("Constant should not be null");
+                throw new IllegalArgumentException("Constant should not be 
null");
             }
         } else {
             byteCodeOffset += 2;
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java 
b/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java
index e384ee75..3a830444 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java
@@ -1012,7 +1012,7 @@ public class ClassBands extends BandSet {
                 return;
             }
         }
-        throw new RuntimeException("No suitable definition for " + 
attributeName);
+        throw new IllegalArgumentException("No suitable definition for " + 
attributeName);
     }
 
     public void addFieldAttribute(final NewAttribute attribute) {
@@ -1027,7 +1027,7 @@ public class ClassBands extends BandSet {
                 return;
             }
         }
-        throw new RuntimeException("No suitable definition for " + 
attributeName);
+        throw new IllegalArgumentException("No suitable definition for " + 
attributeName);
     }
 
     public void addMethodAttribute(final NewAttribute attribute) {
@@ -1042,7 +1042,7 @@ public class ClassBands extends BandSet {
                 return;
             }
         }
-        throw new RuntimeException("No suitable definition for " + 
attributeName);
+        throw new IllegalArgumentException("No suitable definition for " + 
attributeName);
     }
 
     public void addCodeAttribute(final NewAttribute attribute) {
@@ -1057,7 +1057,7 @@ public class ClassBands extends BandSet {
                 return;
             }
         }
-        throw new RuntimeException("No suitable definition for " + 
attributeName);
+        throw new IllegalArgumentException("No suitable definition for " + 
attributeName);
     }
 
     public void addMaxStack(final int maxStack, int maxLocals) {
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/NewAttributeBands.java
 
b/src/main/java/org/apache/commons/compress/harmony/pack200/NewAttributeBands.java
index 591ac530..d5bd9176 100644
--- 
a/src/main/java/org/apache/commons/compress/harmony/pack200/NewAttributeBands.java
+++ 
b/src/main/java/org/apache/commons/compress/harmony/pack200/NewAttributeBands.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.StringReader;
+import java.io.UncheckedIOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -808,7 +809,7 @@ public class NewAttributeBands extends BandSet {
             try {
                 result = result << 8 | stream.read();
             } catch (final IOException e) {
-                throw new RuntimeException("Error reading unknown attribute");
+                throw new UncheckedIOException("Error reading unknown 
attribute", e);
             }
         }
         // use casting to preserve sign
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/PackingOptions.java 
b/src/main/java/org/apache/commons/compress/harmony/pack200/PackingOptions.java
index cda71f41..b6d37273 100644
--- 
a/src/main/java/org/apache/commons/compress/harmony/pack200/PackingOptions.java
+++ 
b/src/main/java/org/apache/commons/compress/harmony/pack200/PackingOptions.java
@@ -284,7 +284,7 @@ public class PackingOptions {
     public void setUnknownAttributeAction(final String unknownAttributeAction) 
{
         this.unknownAttributeAction = unknownAttributeAction;
         if (!PASS.equals(unknownAttributeAction) && 
!ERROR.equals(unknownAttributeAction) && !STRIP.equals(unknownAttributeAction)) 
{
-            throw new RuntimeException("Incorrect option for -U, " + 
unknownAttributeAction);
+            throw new IllegalArgumentException("Incorrect option for -U, " + 
unknownAttributeAction);
         }
     }
 
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java 
b/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java
index a187d24c..e9ad068c 100644
--- 
a/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java
+++ 
b/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java
@@ -191,14 +191,14 @@ public class PackingUtils {
         long size = jarEntry.getSize();
         if (size > Integer.MAX_VALUE) {
             // TODO: Should probably allow this
-            throw new RuntimeException("Large Class!");
+            throw new IllegalArgumentException("Large Class!");
         }
         if (size < 0) {
             size = 0;
         }
         final byte[] bytes = new byte[(int) size];
         if (inputStream.read(bytes) != size) {
-            throw new RuntimeException("Error reading from stream");
+            throw new IllegalArgumentException("Error reading from stream");
         }
         return bytes;
     }
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java 
b/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
index fe8a7fd9..7e9e2ba0 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
@@ -229,7 +229,7 @@ public class Segment extends ClassVisitor {
             }
             classBands.addClassAttribute(newAttribute);
         } else {
-            throw new RuntimeException("Unexpected attribute encountered: " + 
attribute.type);
+            throw new IllegalArgumentException("Unexpected attribute 
encountered: " + attribute.type);
         }
     }
 
@@ -311,7 +311,7 @@ public class Segment extends ClassVisitor {
                     classBands.addMethodAttribute(newAttribute);
                 }
             } else {
-                throw new RuntimeException("Unexpected attribute encountered: 
" + attribute.type);
+                throw new IllegalArgumentException("Unexpected attribute 
encountered: " + attribute.type);
             }
         }
 
@@ -503,13 +503,13 @@ public class Segment extends ClassVisitor {
 
                 @Override
                 public AnnotationVisitor visitAnnotation(final String arg0, 
final String arg1) {
-                    throw new RuntimeException("Not yet supported");
+                    throw new UnsupportedOperationException("Not yet 
supported");
 //                    return null;
                 }
 
                 @Override
                 public AnnotationVisitor visitArray(final String arg0) {
-                    throw new RuntimeException("Not yet supported");
+                    throw new UnsupportedOperationException("Not yet 
supported");
 //                    return null;
                 }
 
@@ -596,7 +596,7 @@ public class Segment extends ClassVisitor {
 
         @Override
         public AnnotationVisitor visitAnnotation(final String arg0, final 
String arg1) {
-            throw new RuntimeException("Not yet supported");
+            throw new UnsupportedOperationException("Not yet supported");
         }
 
         @Override
@@ -660,7 +660,7 @@ public class Segment extends ClassVisitor {
                 }
                 classBands.addFieldAttribute(newAttribute);
             } else {
-                throw new RuntimeException("Unexpected attribute encountered: 
" + attribute.type);
+                throw new IllegalArgumentException("Unexpected attribute 
encountered: " + attribute.type);
             }
         }
 
diff --git 
a/src/main/java/org/apache/commons/compress/parallel/FileBasedScatterGatherBackingStore.java
 
b/src/main/java/org/apache/commons/compress/parallel/FileBasedScatterGatherBackingStore.java
index 52a0de35..35f88aa4 100644
--- 
a/src/main/java/org/apache/commons/compress/parallel/FileBasedScatterGatherBackingStore.java
+++ 
b/src/main/java/org/apache/commons/compress/parallel/FileBasedScatterGatherBackingStore.java
@@ -22,6 +22,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.UncheckedIOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
@@ -54,7 +55,7 @@ public class FileBasedScatterGatherBackingStore implements 
ScatterGatherBackingS
             throw ex;
         } catch (final IOException ex) {
             // must convert exception to stay backwards compatible with 
Compress 1.10 to 1.13
-            throw new RuntimeException(ex); // NOSONAR
+            throw new UncheckedIOException(ex); // NOSONAR
         }
     }
 
diff --git a/src/test/java/org/apache/commons/compress/ArchiveReadTest.java 
b/src/test/java/org/apache/commons/compress/ArchiveReadTest.java
index 112826c9..44708348 100644
--- a/src/test/java/org/apache/commons/compress/ArchiveReadTest.java
+++ b/src/test/java/org/apache/commons/compress/ArchiveReadTest.java
@@ -54,7 +54,7 @@ public class ArchiveReadTest extends AbstractTestCase {
         try {
             ARCDIR = new File(CLASSLOADER.getResource("archives").toURI());
         } catch (final URISyntaxException e) {
-            throw new RuntimeException(e);
+            throw new AssertionError(e);
         }
     }
 
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java 
b/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java
index d0ee6759..c6174ca7 100644
--- a/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/LongPathTest.java
@@ -59,7 +59,7 @@ public class LongPathTest extends AbstractTestCase {
         try {
             ARCDIR = new File(CLASSLOADER.getResource("longpath").toURI());
         } catch (final URISyntaxException e) {
-            throw new RuntimeException(e);
+            throw new AssertionError(e);
         }
     }
 
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/LongSymLinkTest.java 
b/src/test/java/org/apache/commons/compress/archivers/LongSymLinkTest.java
index c513b1ef..21306daf 100644
--- a/src/test/java/org/apache/commons/compress/archivers/LongSymLinkTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/LongSymLinkTest.java
@@ -59,7 +59,7 @@ public class LongSymLinkTest extends AbstractTestCase {
         try {
             ARCDIR = new File(CLASSLOADER.getResource("longsymlink").toURI());
         } catch (final URISyntaxException e) {
-            throw new RuntimeException(e);
+            throw new AssertionError(e);
         }
     }
 
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java 
b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
index 9b46c62f..5a543413 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
@@ -854,57 +854,51 @@ public class ZipFileTest {
         }
     }
 
-    private void assertAllReadMethods(final byte[] expected, final ZipFile 
zipFile, final ZipArchiveEntry entry) {
-        // simple IOUtil read
-        try (InputStream stream = zf.getInputStream(entry)) {
-            final byte[] full = IOUtils.toByteArray(stream);
-            assertArrayEquals(expected, full);
-        }
-        catch (final IOException ex) {
-            throw new RuntimeException(ex);
-        }
-
-        // big buffer at the beginning and then chunks by IOUtils read
-        try (InputStream stream = zf.getInputStream(entry)) {
-            byte[] full;
-            final byte[] bytes = new byte[0x40000];
-            final int read = stream.read(bytes);
-            if (read < 0) {
-                full = ByteUtils.EMPTY_BYTE_ARRAY;
-            }
-            else {
-                full = readStreamRest(bytes, read, stream);
-            }
-            assertArrayEquals(expected, full);
-        }
-        catch (final IOException ex) {
-            throw new RuntimeException(ex);
-        }
-
-        // small chunk / single byte and big buffer then
-        try (InputStream stream = zf.getInputStream(entry)) {
-            byte[] full;
-            final int single = stream.read();
-            if (single < 0) {
-                full = ByteUtils.EMPTY_BYTE_ARRAY;
-            }
-            else {
-                final byte[] big = new byte[0x40000];
-                big[0] = (byte)single;
-                final int read = stream.read(big, 1, big.length-1);
-                if (read < 0) {
-                    full = new byte[]{ (byte)single };
-                }
-                else {
-                    full = readStreamRest(big, read+1, stream);
-                }
-            }
-            assertArrayEquals(expected, full);
-        }
-        catch (final IOException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
+       private void assertAllReadMethods(final byte[] expected, final ZipFile 
zipFile, final ZipArchiveEntry entry) {
+               // simple IOUtil read
+               try (InputStream stream = zf.getInputStream(entry)) {
+                       final byte[] full = IOUtils.toByteArray(stream);
+                       assertArrayEquals(expected, full);
+               } catch (final IOException ex) {
+                       throw new AssertionError(ex);
+               }
+
+               // big buffer at the beginning and then chunks by IOUtils read
+               try (InputStream stream = zf.getInputStream(entry)) {
+                       byte[] full;
+                       final byte[] bytes = new byte[0x40000];
+                       final int read = stream.read(bytes);
+                       if (read < 0) {
+                               full = ByteUtils.EMPTY_BYTE_ARRAY;
+                       } else {
+                               full = readStreamRest(bytes, read, stream);
+                       }
+                       assertArrayEquals(expected, full);
+               } catch (final IOException ex) {
+                       throw new AssertionError(ex);
+               }
+
+               // small chunk / single byte and big buffer then
+               try (InputStream stream = zf.getInputStream(entry)) {
+                       byte[] full;
+                       final int single = stream.read();
+                       if (single < 0) {
+                               full = ByteUtils.EMPTY_BYTE_ARRAY;
+                       } else {
+                               final byte[] big = new byte[0x40000];
+                               big[0] = (byte) single;
+                               final int read = stream.read(big, 1, big.length 
- 1);
+                               if (read < 0) {
+                                       full = new byte[] { (byte) single };
+                               } else {
+                                       full = readStreamRest(big, read + 1, 
stream);
+                               }
+                       }
+                       assertArrayEquals(expected, full);
+               } catch (final IOException ex) {
+                       throw new AssertionError(ex);
+               }
+       }
 
     /**
      * Utility to append the rest of the stream to already read data.
diff --git 
a/src/test/java/org/apache/commons/compress/harmony/unpack200/tests/Compress626Test.java
 
b/src/test/java/org/apache/commons/compress/harmony/unpack200/tests/Compress626Test.java
new file mode 100644
index 00000000..690cb6ef
--- /dev/null
+++ 
b/src/test/java/org/apache/commons/compress/harmony/unpack200/tests/Compress626Test.java
@@ -0,0 +1,55 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.commons.compress.harmony.unpack200.tests;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.jar.JarOutputStream;
+
+import org.apache.commons.compress.harmony.pack200.AttributeDefinitionBands;
+import org.apache.commons.compress.harmony.pack200.CPUTF8;
+import org.apache.commons.compress.harmony.pack200.NewAttributeBands;
+import org.apache.commons.compress.java.util.jar.Pack200;
+import org.apache.commons.io.output.NullOutputStream;
+import org.junit.Ignore;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+@Disabled @Ignore
+public class Compress626Test {
+
+       @Test
+    public void test() throws Exception {
+               CPUTF8 name = new CPUTF8("");
+               CPUTF8 layout = new CPUTF8("[");
+        new NewAttributeBands(1, null, null,
+                new AttributeDefinitionBands.AttributeDefinition(35, 
AttributeDefinitionBands.CONTEXT_CLASS, name, layout)
+        );
+    }
+
+       @Test
+       public void testJar() throws IOException {
+               try (InputStream inputStream = Files.newInputStream(
+                               
Paths.get("src/test/resources/org/apache/commons/compress/COMPRESS-626/compress-626-pack200.jar"));
+                               JarOutputStream out = new 
JarOutputStream(NullOutputStream.NULL_OUTPUT_STREAM);) {
+                       Pack200.newUnpacker().unpack(inputStream, out);
+               }
+       }
+}
diff --git 
a/src/test/resources/org/apache/commons/compress/COMPRESS-626/compress-626-pack200.jar
 
b/src/test/resources/org/apache/commons/compress/COMPRESS-626/compress-626-pack200.jar
new file mode 100644
index 00000000..4c234830
Binary files /dev/null and 
b/src/test/resources/org/apache/commons/compress/COMPRESS-626/compress-626-pack200.jar
 differ

Reply via email to