[ https://issues.apache.org/jira/browse/COMPRESS-627?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gary D. Gregory updated COMPRESS-627: ------------------------------------- Summary: Pack200 causes a 'archive.3E' error if it’s not in the system class loader. (was: Pack200 by apache compress cause archive.3E error if it’s not on system ClassLoader.) > Pack200 causes a 'archive.3E' error if it’s not in the system class loader. > --------------------------------------------------------------------------- > > 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 > --stdout > anataw...@owlan031072216.sras.sic.shibaura-it.ac.jp > --------------------------------------------------- > OS: macOS 12.6 21G115 arm64 > Host: MacBookPro18,4 > Kernel: 21.6.0 > Uptime: 11 days, 8 hours, 58 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: 10849MiB / 65536MiB > 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)