[JIRA] (HHH-16772) Generated bytecode for HibernateAccessOptimizer class is invalid and causes operand stack overflow issue.
by Aurimas Niekis (JIRA)
Aurimas Niekis ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... ) *created* an issue
Hibernate ORM ( https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiM2Y4MTZhOGVm... ) / Bug ( https://hibernate.atlassian.net/browse/HHH-16772?atlOrigin=eyJpIjoiM2Y4MT... ) HHH-16772 ( https://hibernate.atlassian.net/browse/HHH-16772?atlOrigin=eyJpIjoiM2Y4MT... ) Generated bytecode for HibernateAccessOptimizer class is invalid and causes operand stack overflow issue. ( https://hibernate.atlassian.net/browse/HHH-16772?atlOrigin=eyJpIjoiM2Y4MT... )
Issue Type: Bug Affects Versions: 6.2.2 Assignee: Unassigned Components: bytecode-enhancement Created: 08/Jun/2023 06:55 AM Environment: byte-buddy-1.14.4
spring-orm-6.0.9
spring-boot-3.1.0
java 19/20 tested Priority: Major Reporter: Aurimas Niekis ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%... )
The generated bytecode using byte-buddy for HibernateAccessOptimizer class for MappedSuperclass generates invalid bytecode and fails to load that class.
Caused by: java.lang.VerifyError: Operand stack overflow
Exception Details:
Location:
org/framjet/framework/events/storage/domain/AbstractEventStorageEntity$HibernateAccessOptimizer$bc4DkbHT.set_timestamp(Lorg/framjet/framework/events/storage/entity/EventStorageEntity;J)V @1: lload_1
Reason:
Exceeded max stack size.
Current Frame:
bci: @1
flags: { }
locals: { 'org/framjet/framework/events/storage/entity/EventStorageEntity', long, long_2nd }
stack: { 'org/framjet/framework/events/storage/entity/EventStorageEntity' }
Bytecode:
0000000: 2a1f b500 20b1
I have already filed an issue with byte-code as I believe it's an issue with standard SetFieldOnArgument logic.
https://github.com/raphw/byte-buddy/issues/1451
The reproducible project with spring-boot: https://github.com/aurimasniekis/bytebuddy-hibernate-bytecode-reproduce fails on the run.
Caused by: org.hibernate.MappingException: Could not instantiate persister org.hibernate.persister.entity.SingleTableEntityPersister
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:103) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:75) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.processBootEntities(MappingMetamodelImpl.java:247) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.finishInitialization(MappingMetamodelImpl.java:185) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.internal.SessionFactoryImpl.initializeMappingModel(SessionFactoryImpl.java:319) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:269) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[spring-orm-6.0.9.jar:6.0.9]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.0.9.jar:6.0.9]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.0.9.jar:6.0.9]
... 20 common frames omitted
Caused by: java.lang.VerifyError: Operand stack overflow
Exception Details:
Location:
com/example/bytebuddyhibernatebytecodereproduce/domain/AbstractEventStorageEntity$HibernateAccessOptimizer$Ag9dHcj2.set_timestamp(Lcom/example/bytebuddyhibernatebytecodereproduce/entity/EventStorageEntity;J)V @1: lload_1
Reason:
Exceeded max stack size.
Current Frame:
bci: @1
flags: { }
locals: { 'com/example/bytebuddyhibernatebytecodereproduce/entity/EventStorageEntity', long, long_2nd }
stack: { 'com/example/bytebuddyhibernatebytecodereproduce/entity/EventStorageEntity' }
Bytecode:
0000000: 2a1f b500 20b1
at java.base/java.lang.ClassLoader.defineClass0(Native Method) ~[na:na]
at java.base/java.lang.System$2.defineClass(System.java:2371) ~[na:na]
at java.base/java.lang.invoke.MethodHandles$Lookup$ClassDefiner.defineClass(MethodHandles.java:2449) ~[na:na]
at java.base/java.lang.invoke.MethodHandles$Lookup$ClassDefiner.defineClass(MethodHandles.java:2426) ~[na:na]
at java.base/java.lang.invoke.MethodHandles$Lookup.defineClass(MethodHandles.java:1851) ~[na:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na]
at net.bytebuddy.utility.Invoker$Dispatcher.invoke(Unknown Source) ~[na:na]
at net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForNonStaticMethod.invoke(JavaDispatcher.java:1032) ~[byte-buddy-1.14.4.jar:na]
at net.bytebuddy.utility.dispatcher.JavaDispatcher$ProxiedInvocationHandler.invoke(JavaDispatcher.java:1162) ~[byte-buddy-1.14.4.jar:na]
at jdk.proxy2/jdk.proxy2.$Proxy93.defineClass(Unknown Source) ~[na:na]
at net.bytebuddy.dynamic.loading.ClassInjector$UsingLookup.injectRaw(ClassInjector.java:1638) ~[byte-buddy-1.14.4.jar:na]
at net.bytebuddy.dynamic.loading.ClassInjector$AbstractBase.inject(ClassInjector.java:118) ~[byte-buddy-1.14.4.jar:na]
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$UsingLookup.load(ClassLoadingStrategy.java:519) ~[byte-buddy-1.14.4.jar:na]
at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:101) ~[byte-buddy-1.14.4.jar:na]
at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:6317) ~[byte-buddy-1.14.4.jar:na]
at org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState.load(ByteBuddyState.java:146) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.bytecode.internal.bytebuddy.BytecodeProviderImpl.determineAccessOptimizerSuperClass(BytecodeProviderImpl.java:307) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.bytecode.internal.bytebuddy.BytecodeProviderImpl.getReflectionOptimizer(BytecodeProviderImpl.java:238) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.metamodel.internal.EntityRepresentationStrategyPojoStandard.resolveReflectionOptimizer(EntityRepresentationStrategyPojoStandard.java:293) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.metamodel.internal.EntityRepresentationStrategyPojoStandard.<init>(EntityRepresentationStrategyPojoStandard.java:161) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.metamodel.internal.ManagedTypeRepresentationResolverStandard.resolveStrategy(ManagedTypeRepresentationResolverStandard.java:62) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:499) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:139) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484) ~[na:na]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:92) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
... 30 common frames omitted
( https://hibernate.atlassian.net/browse/HHH-16772#add-comment?atlOrigin=ey... ) Add Comment ( https://hibernate.atlassian.net/browse/HHH-16772#add-comment?atlOrigin=ey... )
Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.... ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailN... ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100225- sha1:62413c2 )
2 years, 10 months