Hi Gary,

well I'm kinda done here, things work fine for me. I did create an issue
though: https://issues.apache.org/jira/browse/BCEL-360

On Fri, 4 Feb 2022 at 16:54, Gary Gregory <garydgreg...@gmail.com> wrote:

> Stefan,
>
> Would you please create a Jira ticket? This will give your issue more
> visibility and one location with ALL the information needed in the future.
>
> Gary
>
>
> On Fri, Feb 4, 2022, 09:49 Stefan Reich
> <stefan.reich.maker.of....@googlemail.com.invalid> wrote:
>
> > Will you look at that. BCEL's verifier actually checks for this
> > (Pass3aVerifier.java):
> >
> > public void visitLDC(final LDC ldc) {
> >     indexValid(ldc, ldc.getIndex());
> >     final Constant c = constantPoolGen.getConstant(ldc.getIndex());
> >     if (c instanceof ConstantClass) {
> >       addMessage("Operand of LDC or LDC_W is CONSTANT_Class '"+c+"' -
> > this is only supported in JDK 1.5 and higher.");
> >     }
> >     else{
> >       if (! ( c instanceof ConstantInteger    ||
> >               c instanceof ConstantFloat         ||
> >         c instanceof ConstantString ) ) {
> >     constraintViolated(ldc,
> >         "Operand of LDC or LDC_W must be one of CONSTANT_Integer,
> > CONSTANT_Float or CONSTANT_String, but is '"+c+"'.");
> >       }
> >     }
> > }
> >
> > It generates just a warning though, not an actual error.
> >
> > I quickly checked out LDC.java to see if I can submit a PR, but I think I
> > don't know enough about BCEL to actually do it. I'll leave it to the
> > experts.
> >
> > Greetings
> >
> > On Fri, 4 Feb 2022 at 15:37, Stefan Reich <
> > stefan.reich.maker.of....@googlemail.com> wrote:
> >
> > > Update: They changed it in Java 5. ClassGen.setMajor(49) +
> > > ClassGen.setMinor(0) works.
> > >
> > > On Fri, 4 Feb 2022 at 15:26, Stefan Reich <
> > > stefan.reich.maker.of....@googlemail.com> wrote:
> > >
> > >> Mystery solved, ladies and gentlemen...
> > >>
> > >> It was...
> > >>
> > >> the byte code version. BCEL outputs version 45.3 by default (JDK 1.1).
> > >> There were multiple changes to the class file format spec since then.
> > >>
> > >> Specifically, they must have allowed ldc to load .class objects
> directly
> > >> at some point after JDK 1.1. In fact, I distinctly remember the
> > >> Class.forName shenanigans that javac produced back then instead of the
> > >> direct ldc.
> > >>
> > >> Apparently the Java verifier is so strict it judges the class file
> > >> according to its version number and disallows the new version of ldc
> in
> > a
> > >> class file written for JDK 1.1.
> > >>
> > >> BCEL doesn't check for this though and outputs a broken class file.
> > >> Changing this might be a good idea.
> > >>
> > >> Unfortunately I couldn't find documentation on when the byte code spec
> > >> change happened. Does anyone know?
> > >>
> > >> Neither did I find anything in the HotSpot verifier sources
> > >> <
> >
> https://github.com/openjdk/jdk/blob/master/src/hotspot/share/classfile/verifier.cpp
> > >
> > >> which is odd to me. No mention of a JDK version there. Only in
> > >> clasfileparser.cpp
> > >> <
> >
> https://github.com/openjdk/jdk/blob/master/src/hotspot/share/classfile/classFileParser.cpp
> > >
> > >> but didn't find the issue in question there either. I'm by no means an
> > >> expert in the JDK C++ source though.
> > >>
> > >> Cheers
> > >> Stefan
> > >>
> > >> On Thu, 3 Feb 2022 at 08:32, Romain Manni-Bucau <
> rmannibu...@gmail.com>
> > >> wrote:
> > >>
> > >>> Hi,
> > >>>
> > >>> Maybe a bit ot of topic but did you check with asm (using classreader
> > for
> > >>> ex) if it is readable for it? Javap in verbose mode is hard to read
> > >>> humanly
> > >>> (and not verbosel does not mean much) so an issue can still be
> hidden.
> > >>>
> > >>> Romain Manni-Bucau
> > >>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > >>> <https://rmannibucau.metawerx.net/> | Old Blog
> > >>> <http://rmannibucau.wordpress.com> | Github <
> > >>> https://github.com/rmannibucau> |
> > >>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> > >>> <
> > >>>
> >
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> > >>> >
> > >>>
> > >>>
> > >>> Le jeu. 3 févr. 2022 à 01:42, Stefan Reich
> > >>> <stefan.reich.maker.of....@googlemail.com.invalid> a écrit :
> > >>>
> > >>> > I'm mainly curious how it's possible that everything looks
> completely
> > >>> > normal in javap (checked a dozen times), but the class verifier
> > >>> complains
> > >>> > anyway? Something has to be different. Is there a way to dig deeper
> > >>> into a
> > >>> > class file?
> > >>> >
> > >>> > Greetings
> > >>> >
> > >>> > On Wed, 2 Feb 2022 at 23:14, Stefan Reich <
> > >>> > stefan.reich.maker.of....@googlemail.com> wrote:
> > >>> >
> > >>> > > Hmm, no change with latest version.
> > >>> > >
> > >>> > > I did "git clone https://github.com/apache/commons-bcel.git"; and
> > >>> "mvn
> > >>> > > package".
> > >>> > >
> > >>> > > stefan@lenovo-ThinkPad-X220:~/dev/classreftest$ javac -cp
> > >>> > > bcel-6.6.0-SNAPSHOT.jar MakeBadClassFile.java
> > >>> > > stefan@lenovo-ThinkPad-X220:~/dev/classreftest$ java -cp
> > >>> > > bcel-6.6.0-SNAPSHOT.jar:. MakeBadClassFile
> > >>> > > Now please try: java BadClassFile
> > >>> > > stefan@lenovo-ThinkPad-X220:~/dev/classreftest$ java
> BadClassFile
> > >>> > > Error: Unable to initialize main class BadClassFile
> > >>> > > Caused by: java.lang.VerifyError: (class: BadClassFile, method:
> > main
> > >>> > > signature: ([Ljava/lang/String;)V) Illegal type in constant pool
> > >>> > > stefan@lenovo-ThinkPad-X220:~/dev/classreftest$
> > >>> > >
> > >>> > > On Wed, 2 Feb 2022 at 22:59, Gary Gregory <
> garydgreg...@gmail.com>
> > >>> > wrote:
> > >>> > >
> > >>> > >> You should try the latest from git master.
> > >>> > >>
> > >>> > >> Gary
> > >>> > >>
> > >>> > >> On Wed, Feb 2, 2022, 15:41 Stefan Reich
> > >>> > >> <stefan.reich.maker.of....@googlemail.com.invalid> wrote:
> > >>> > >>
> > >>> > >> > Hi again,
> > >>> > >> >
> > >>> > >> > actual problem this time...
> > >>> > >> >
> > >>> > >> > I think I am doing everything right... Decompilation in javap
> -v
> > >>> looks
> > >>> > >> > just like it should. But I get a VerifyError... I'm using JDK
> > 17.
> > >>> Full
> > >>> > >> > program attached. Please advice, thank you :)
> > >>> > >> >
> > >>> > >> > # javac -cp bcel-6.5.0.jar MakeBadClassFile.java
> > >>> > >> > # java -cp bcel-6.5.0.jar:. MakeBadClassFile
> > >>> > >> > # java BadClassFile
> > >>> > >> > Error: Unable to initialize main class BadClassFile
> > >>> > >> > Caused by: java.lang.VerifyError: (class: BadClassFile,
> method:
> > >>> main
> > >>> > >> > signature: ([Ljava/lang/String;)V) Illegal type in constant
> pool
> > >>> > >> >
> > >>> > >> >
> > >>> > >> >
> > >>> ---------------------------------------------------------------------
> > >>> > >> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > >>> > >> > For additional commands, e-mail: dev-h...@commons.apache.org
> > >>> > >>
> > >>> > >
> > >>> > >
> > >>> >
> > >>
> > >>
> > >
> >
>


-- 
==    Join the *https://t.me/HumanAscension <https://t.me/HumanAscension>*
 ==
== https://bitchute.com/channel/LxVBAHP3O0Hj ==

Reply via email to