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
The following commit(s) were added to refs/heads/master by this push: new a770a37bf Add a null-check in Pack200.newInstance(String, String) a770a37bf is described below commit a770a37bf52b1b1a75ddc47732085a3462ebf65b Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Tue Dec 12 12:27:22 2023 -0500 Add a null-check in Pack200.newInstance(String, String) --- src/changes/changes.xml | 3 +- .../commons/compress/java/util/jar/Pack200.java | 51 ++++++++++++++-------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 7e498e251..7988155ed 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -53,7 +53,8 @@ The <action> type attribute can be add,update,fix,remove. <action type="fix" issue="COMPRESS-632" dev="ggregory" due-to="Yakov Shafranovich, Gary Gregory">Improve CPIO exception detection and handling #441.</action> <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate SkipShieldingInputStream without replacement (no longer used).</action> <action type="fix" dev="ggregory" due-to="Gary Gregory">Reuse commons-codec, don't duplicate package-private class PureJavaCrc32C.</action> - <action type="fix" dev="ggregory" due-to="alumi, Gary Gregory">Add a null check for the class loader of OsgiUtils #451.</action> + <action type="fix" dev="ggregory" due-to="alumi, Gary Gregory">Add a null-check for the class loader of OsgiUtils #451.</action> + <action type="fix" dev="ggregory" due-to="alumi, Gary Gregory">Add a null-check in Pack200.newInstance(String, String).</action> <!-- UPDATE --> <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-lang3 from 3.13.0 to 3.14.0.</action> <action type="update" dev="ggregory" due-to="Dependabot">Bump com.github.marschall:memoryfilesystem from 2.6.1 to 2.7.0 #444.</action> diff --git a/src/main/java/org/apache/commons/compress/java/util/jar/Pack200.java b/src/main/java/org/apache/commons/compress/java/util/jar/Pack200.java index 1c31a7f95..a7f9a9294 100644 --- a/src/main/java/org/apache/commons/compress/java/util/jar/Pack200.java +++ b/src/main/java/org/apache/commons/compress/java/util/jar/Pack200.java @@ -23,6 +23,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Objects; import java.util.SortedMap; import java.util.jar.JarFile; import java.util.jar.JarInputStream; @@ -41,22 +42,22 @@ public abstract class Pack200 { public interface Packer { /** - * the format of a class attribute name. + * The format of a class attribute name. */ String CLASS_ATTRIBUTE_PFX = "pack.class.attribute."; //$NON-NLS-1$ /** - * the format of a code attribute name. + * The format of a code attribute name. */ String CODE_ATTRIBUTE_PFX = "pack.code.attribute."; //$NON-NLS-1$ /** - * the deflation hint to set in the output archive. + * The deflation hint to set in the output archive. */ String DEFLATE_HINT = "pack.deflate.hint";//$NON-NLS-1$ /** - * the indicated amount of effort to use in compressing the archive. + * The indicated amount of effort to use in compressing the archive. */ String EFFORT = "pack.effort";//$NON-NLS-1$ @@ -71,47 +72,47 @@ public abstract class Pack200 { String FALSE = "false";//$NON-NLS-1$ /** - * the format of a field attribute name. + * The format of a field attribute name. */ String FIELD_ATTRIBUTE_PFX = "pack.field.attribute.";//$NON-NLS-1$ /** - * a String representation for {@code keep}. + * The String representation for {@code keep}. */ String KEEP = "keep";//$NON-NLS-1$ /** - * decide if all elements shall transmit in their original order. + * Decide if all elements shall transmit in their original order. */ String KEEP_FILE_ORDER = "pack.keep.file.order";//$NON-NLS-1$ /** - * a String representation for {@code latest}. + * The String representation for {@code latest}. */ String LATEST = "latest";//$NON-NLS-1$ /** - * the format of a method attribute name. + * The format of a method attribute name. */ String METHOD_ATTRIBUTE_PFX = "pack.method.attribute.";//$NON-NLS-1$ /** - * if it shall attempt to determine the latest modification time if this is set to {@code LATEST}. + * If it shall attempt to determine the latest modification time if this is set to {@code LATEST}. */ String MODIFICATION_TIME = "pack.modification.time";//$NON-NLS-1$ /** - * a String representation of {@code pass}. + * The String representation of {@code pass}. */ String PASS = "pass";//$NON-NLS-1$ /** - * the file that will not be compressed. + * The file that will not be compressed. */ String PASS_FILE_PFX = "pack.pass.file.";//$NON-NLS-1$ /** - * packer progress as a percentage. + * Packer progress as a percentage. */ String PROGRESS = "pack.progress";//$NON-NLS-1$ @@ -121,22 +122,22 @@ public abstract class Pack200 { String SEGMENT_LIMIT = "pack.segment.limit";//$NON-NLS-1$ /** - * a String representation of {@code strip}. + * The String representation of {@code strip}. */ String STRIP = "strip";//$NON-NLS-1$ /** - * a String representation of {@code true}. + * The String representation of {@code true}. */ String TRUE = "true";//$NON-NLS-1$ /** - * the action to take if an unknown attribute is encountered. + * The action to take if an unknown attribute is encountered. */ String UNKNOWN_ATTRIBUTE = "pack.unknown.attribute";//$NON-NLS-1$ /** - * add a listener for PropertyChange events + * Add a listener for PropertyChange events * * @param listener the listener to listen if PropertyChange events occurs */ @@ -196,7 +197,7 @@ public abstract class Pack200 { String KEEP = "keep";//$NON-NLS-1$ /** - * the progress as a {@code percentage}. + * The progress as a {@code percentage}. */ String PROGRESS = "unpack.progress";//$NON-NLS-1$ @@ -245,8 +246,14 @@ public abstract class Pack200 { void unpack(InputStream in, JarOutputStream out) throws IOException; } + /** + * System property key. + */ private static final String SYSTEM_PROPERTY_PACKER = "java.util.jar.Pack200.Packer"; //$NON-NLS-1$ + /** + * System property key. + */ private static final String SYSTEM_PROPERTY_UNPACKER = "java.util.jar.Pack200.Unpacker"; //$NON-NLS-1$ static Object newInstance(final String systemProperty, final String defaultClassName) { @@ -254,7 +261,11 @@ public abstract class Pack200 { final String className = System.getProperty(systemProperty, defaultClassName); try { // TODO Not sure if this will cause problems loading the class - return Pack200.class.getClassLoader().loadClass(className).getConstructor().newInstance(); + ClassLoader classLoader = Pack200.class.getClassLoader(); + if (classLoader == null) { + classLoader = Objects.requireNonNull(ClassLoader.getSystemClassLoader(), "ClassLoader.getSystemClassLoader()"); + } + return classLoader.loadClass(className).getConstructor().newInstance(); } catch (final Exception e) { throw new Error(Messages.getString("archive.3E", className), e); //$NON-NLS-1$ } @@ -266,6 +277,7 @@ public abstract class Pack200 { * <p> * The implementation of the packer engine is defined by the system property {@code 'java.util.jar.Pack200.Packer'}. If this system property is defined an * instance of the specified class is returned, otherwise the system's default implementation is returned. + * </p> * * @return an instance of {@code Packer} */ @@ -278,6 +290,7 @@ public abstract class Pack200 { * <p> * The implementation of the unpacker engine is defined by the system property {@link Pack200.Unpacker}. If this system property is defined an instance of * the specified class is returned, otherwise the system's default implementation is returned. + * </p> * * @return an instance of {@link Pack200.Unpacker}. */