You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "anatawa12 (Jira)" <ji...@apache.org> on 2022/10/03 00:44:00 UTC

[jira] [Updated] (COMPRESS-627) Pack200 by apache compress cause archive.3E error if it’s not on system ClassLoader.

     [ https://issues.apache.org/jira/browse/COMPRESS-627?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

anatawa12 updated COMPRESS-627:
-------------------------------
    Environment: 
{code:java}
anatawa12@anatawa12-book:~/commons-compress-pack200-test $ neofetch --off
anatawa12@anatawa12-book.local ---------------------------------------------------
OS: macOS 12.6 21G115 arm64
Host: MacBookPro18,4
Kernel: 21.6.0
Uptime: 11 days, 7 hours, 47 mins
Packages: 199 (brew)
Shell: zsh 5.8.1
Resolution: 1800x1169
DE: Aqua
WM: Quartz Compositor
WM Theme: Blue (Light)
Terminal: iTerm2
Terminal Font: Monaco 12
CPU: Apple M1 Max
GPU: Apple M1 Max
Memory: 10919MiB / 65536MiB





anatawa12@anatawa12-book:~/commons-compress-pack200-test $ uname -v
Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000
anatawa12@anatawa12-book:~/commons-compress-pack200-test $ java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Zulu 8.62.0.19-CA-macos-aarch64) (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (Zulu 8.62.0.19-CA-macos-aarch64) (build 25.332-b09, mixed mode)
{code}

  was:
{code}
anatawa12@anatawa12-book:~/commons-compress-pack200-test $ uname -v
Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000
anatawa12@anatawa12-book:~/commons-compress-pack200-test $ java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Zulu 8.62.0.19-CA-macos-aarch64) (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (Zulu 8.62.0.19-CA-macos-aarch64) (build 25.332-b09, mixed mode)
{code}


> Pack200 by apache compress cause archive.3E error if it’s not on system ClassLoader.
> ------------------------------------------------------------------------------------
>
>                 Key: COMPRESS-627
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-627
>             Project: Commons Compress
>          Issue Type: Bug
>    Affects Versions: 1.21
>         Environment: {code:java}
> anatawa12@anatawa12-book:~/commons-compress-pack200-test $ neofetch --off
> anatawa12@anatawa12-book.local ---------------------------------------------------
> OS: macOS 12.6 21G115 arm64
> Host: MacBookPro18,4
> Kernel: 21.6.0
> Uptime: 11 days, 7 hours, 47 mins
> Packages: 199 (brew)
> Shell: zsh 5.8.1
> Resolution: 1800x1169
> DE: Aqua
> WM: Quartz Compositor
> WM Theme: Blue (Light)
> Terminal: iTerm2
> Terminal Font: Monaco 12
> CPU: Apple M1 Max
> GPU: Apple M1 Max
> Memory: 10919MiB / 65536MiB
> anatawa12@anatawa12-book:~/commons-compress-pack200-test $ uname -v
> Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000
> anatawa12@anatawa12-book:~/commons-compress-pack200-test $ java -version
> openjdk version "1.8.0_332"
> OpenJDK Runtime Environment (Zulu 8.62.0.19-CA-macos-aarch64) (build 1.8.0_332-b09)
> OpenJDK 64-Bit Server VM (Zulu 8.62.0.19-CA-macos-aarch64) (build 25.332-b09, mixed mode)
> {code}
>            Reporter: anatawa12
>            Priority: Major
>         Attachments: Main-1.java
>
>
> {code:java}
> import org.apache.commons.compress.java.util.jar.Pack200;
> import java.lang.reflect.Method;
> import java.net.URLClassLoader;
> import java.net.URL;
> import java.io.File;
> class Main {
>   public static void main(String[] args) throws Throwable {
>     URLClassLoader ucl = new URLClassLoader(new URL[] {
>       new File(".").toURI().toURL(),
>       new File("commons-compress-1.21.jar").toURI().toURL(),
>     }, null);
>     System.out.println("=== Unpacker ===");
>     Method method;
>     try {
>       method = ucl.loadClass("InClassLoaderClass").getDeclaredMethod("unpacker");
>       method.setAccessible(true);
>       method.invoke(null);
>     } catch (Throwable t) {
>       t.printStackTrace();
>     }
>     System.out.println("=== Packer ===");
>     try {
>       method = ucl.loadClass("InClassLoaderClass").getDeclaredMethod("packer");
>       method.setAccessible(true);
>       method.invoke(null);
>     } catch (Throwable t) {
>       t.printStackTrace();
>     }
>   }
> }
> class InClassLoaderClass {
>   public static void unpacker() {
>     Pack200.newUnpacker();
>   }
>   public static void packer() {
>     Pack200.newPacker();
>   }
> }
> {code}
> execute this code (same as attached {{Main.java}}) with {{ClassLoaderClass.class}} (compiled code of this file) and {{commons-compress-1.21.jar}} is on working directory will cause the following error:
> {code:java}
> anatawa12@anatawa12-book:~/commons-compress-pack200-test $ javac -cp commons-compress-1.21.jar Main.java && java Main
> === Unpacker ===
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:498)
> 	at Main.main(Main.java:19)
> Caused by: java.lang.Error: archive.3E
> 	at org.apache.commons.compress.java.util.jar.Pack200$2.run(Pack200.java:100)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at org.apache.commons.compress.java.util.jar.Pack200.newUnpacker(Pack200.java:91)
> 	at InClassLoaderClass.unpacker(Main.java:37)
> 	... 5 more
> Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.harmony.unpack200.Pack200UnpackerAdapter
> 	at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
> 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
> 	at org.apache.commons.compress.java.util.jar.Pack200$2.run(Pack200.java:98)
> 	... 8 more
> === Packer ===
> java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:498)
> 	at Main.main(Main.java:28)
> Caused by: java.lang.Error: archive.3E
> 	at org.apache.commons.compress.java.util.jar.Pack200$1.run(Pack200.java:72)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at org.apache.commons.compress.java.util.jar.Pack200.newPacker(Pack200.java:61)
> 	at InClassLoaderClass.packer(Main.java:40)
> 	... 5 more
> Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.harmony.pack200.Pack200PackerAdapter
> 	at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
> 	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
> 	at org.apache.commons.compress.java.util.jar.Pack200$1.run(Pack200.java:70)
> 	... 8 more
> {code}
> In {{src/main/java/org/apache/commons/compress/java/util/jar/Pack200.java}}, {{Packer}}/{{Unpacker}} implementaion is loaded from {{ClassLoader.getSystemClassLoader()}}.
> However, Apache commons compress may be loaded from other class loaders in many environments (e.g. Gradle).
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)