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=Em...
) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100225- sha1:62413c2 )