Skip to content

After upgrading Netty to 4.2.4+, application is throwing java.lang.VerifyError on Android platform 8/9/10/11/12 #15654

@ajith211

Description

@ajith211

Hi Team,
We are using netty as part of Little proxy solution in our Android application. After upgrading netty to 4.2.4 and above, we see following exception in our application
Rejecting re-init on previously-failed class java.lang.Class<io.netty.handler.codec.http.HttpResponseEncoder>: java.lang.VerifyError: Rejecting class io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledDirectByteBuf that attempts to sub-type erroneous class io.netty.buffer.UnpooledDirectByteBuf (declaration of 'io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledDirectByteBuf' appears in /data/app/com.sample.app-HXtH4pA7WR7DkdY6DBm0Eg==/base.apk!classes34.dex)
at io.netty.buffer.ByteBuf io.netty.buffer.UnpooledByteBufAllocator.newDirectBuffer(int, int) (UnpooledByteBufAllocator.java:95)
at io.netty.buffer.ByteBuf io.netty.buffer.AbstractByteBufAllocator.directBuffer(int, int) (AbstractByteBufAllocator.java:188)
at io.netty.buffer.ByteBuf io.netty.buffer.AbstractByteBufAllocator.directBuffer(int) (AbstractByteBufAllocator.java:179)
at io.netty.buffer.ByteBuf io.netty.buffer.Unpooled.directBuffer(int) (Unpooled.java:128)
at void io.netty.handler.codec.http.HttpObjectEncoder.() (HttpObjectEncoder.java:62)
at void org.littleshoot.proxy.impl.ClientToProxyConnection.initChannelPipeline(io.netty.channel.ChannelPipeline) (ClientToProxyConnection.java:796)
at void org.littleshoot.proxy.impl.ClientToProxyConnection.(org.littleshoot.proxy.impl.DefaultHttpProxyServer, org.littleshoot.proxy.SslEngineSource, boolean, io.netty.channel.ChannelPipeline, io.netty.handler.traffic.GlobalTrafficShapingHandler) (ClientToProxyConnection.java:152)
at void org.littleshoot.proxy.impl.DefaultHttpProxyServer$2.initChannel(io.netty.channel.Channel) (DefaultHttpProxyServer.java:517)
at boolean io.netty.channel.ChannelInitializer.initChannel(io.netty.channel.ChannelHandlerContext) (ChannelInitializer.java:128)
at void io.netty.channel.ChannelInitializer.handlerAdded(io.netty.channel.ChannelHandlerContext) (ChannelInitializer.java:111)
at void io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded() (AbstractChannelHandlerContext.java:999)
at void io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(io.netty.channel.AbstractChannelHandlerContext) (DefaultChannelPipeline.java:558)
at void io.netty.channel.DefaultChannelPipeline.access$100(io.netty.channel.DefaultChannelPipeline, io.netty.channel.AbstractChannelHandlerContext) (DefaultChannelPipeline.java:45)
at void io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute() (DefaultChannelPipeline.java:1482)
at void io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers() (DefaultChannelPipeline.java:1136)
at void io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded() (DefaultChannelPipeline.java:599)
\at void io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(io.netty.channel.ChannelFuture) (AbstractChannel.java:383)
at void io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(io.netty.util.concurrent.Future) (AbstractChannel.java:374)
at void io.netty.util.concurrent.DefaultPromise.notifyListener0(io.netty.util.concurrent.Future, io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:603)
at void io.netty.util.concurrent.DefaultPromise.notifyListenersNow() (DefaultPromise.java:570)
at void io.netty.util.concurrent.DefaultPromise.notifyListeners() (DefaultPromise.java:505)
at boolean io.netty.util.concurrent.DefaultPromise.setValue0(java.lang.Object) (DefaultPromise.java:649)
at boolean io.netty.util.concurrent.DefaultPromise.setSuccess0(java.lang.Object) (DefaultPromise.java:638)
at io.netty.util.concurrent.Promise io.netty.util.concurrent.DefaultPromise.setSuccess(java.lang.Object) (DefaultPromise.java:110)
at io.netty.channel.ChannelPromise io.netty.channel.DefaultChannelPromise.setSuccess(java.lang.Void) (DefaultChannelPromise.java:78)
at io.netty.channel.ChannelPromise io.netty.channel.DefaultChannelPromise.setSuccess() (DefaultChannelPromise.java:73)
at void io.netty.channel.nio.AbstractNioChannel.lambda$doRegister$0$io-netty-channel-nio-AbstractNioChannel(io.netty.channel.ChannelPromise, io.netty.util.concurrent.Future) (AbstractNioChannel.java:465)
at void io.netty.channel.nio.AbstractNioChannel$$ExternalSyntheticLambda0.operationComplete(io.netty.util.concurrent.Future) (D8$$SyntheticClass:0)
at void io.netty.util.concurrent.DefaultPromise.notifyListener0(io.netty.util.concurrent.Future, io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:603)
at void io.netty.util.concurrent.DefaultPromise.notifyListenersNow() (DefaultPromise.java:570)
at void io.netty.util.concurrent.DefaultPromise.notifyListeners() (DefaultPromise.java:505)
at io.netty.util.concurrent.Promise io.netty.util.concurrent.DefaultPromise.addListener(io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:198)
at io.netty.util.concurrent.Future io.netty.util.concurrent.DefaultPromise.addListener(io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:36)
at void io.netty.channel.nio.AbstractNioChannel.doRegister(io.netty.channel.ChannelPromise) (AbstractNioChannel.java:462)
at void io.netty.channel.AbstractChannel$AbstractUnsafe.register0(io.netty.channel.ChannelPromise) (AbstractChannel.java:408)
at void io.netty.channel.AbstractChannel$AbstractUnsafe.access$300(io.netty.channel.AbstractChannel$AbstractUnsafe, io.netty.channel.ChannelPromise) (AbstractChannel.java:288)
at void io.netty.channel.AbstractChannel$AbstractUnsafe$1.run() (AbstractChannel.java:352)
at void io.netty.util.concurrent.AbstractEventExecutor.runTask(java.lang.Runnable) (AbstractEventExecutor.java:148)
at void io.netty.util.concurrent.AbstractEventExecutor.safeExecute(java.lang.Runnable) (AbstractEventExecutor.java:141)
at boolean io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(long) (SingleThreadEventExecutor.java:535)
at void io.netty.channel.SingleThreadIoEventLoop.run() (SingleThreadIoEventLoop.java:201)
at void io.netty.util.concurrent.SingleThreadEventExecutor$5.run() (SingleThreadEventExecutor.java:1193)
at void io.netty.util.internal.ThreadExecutorMap$2.run() (ThreadExecutorMap.java:74)
at void java.lang.Thread.run() (Thread.java:919)
Caused by: java.lang.VerifyError: Verifier rejected class io.netty.buffer.UnpooledDirectByteBuf: int io.netty.buffer.UnpooledDirectByteBuf._getInt(int) failed to verify: int io.netty.buffer.UnpooledDirectByteBuf._getInt(int): [0x11] int io.netty.buffer.UnpooledDirectByteBuf._getInt(int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
int io.netty.buffer.UnpooledDirectByteBuf._getIntLE(int) failed to verify: int io.netty.buffer.UnpooledDirectByteBuf._getIntLE(int): [0x11] int io.netty.buffer.UnpooledDirectByteBuf._getIntLE(int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
long io.netty.buffer.UnpooledDirectByteBuf._getLong(int) failed to verify: long io.netty.buffer.UnpooledDirectByteBuf._getLong(int): [0x11] long io.netty.buffer.UnpooledDirectByteBuf._getLong(int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
long io.netty.buffer.UnpooledDirectByteBuf._getLongLE(int) failed to verify: long io.netty.buffer.UnpooledDirectByteBuf._getLongLE(int): [0x11] long io.netty.buffer.UnpooledDirectByteBuf._getLongLE(int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
short io.netty.buffer.UnpooledDirectByteBuf._getShort(int) failed to verify: short io.netty.buffer.UnpooledDirectByteBuf._getShort(int): [0x11] short io.netty.buffer.UnpooledDirectByteBuf._getShort(int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
short io.netty.buffer.UnpooledDirectByteBuf._getShortLE(int) failed to verify: short io.netty.buffer.UnpooledDirectByteBuf._getShortLE(int): [0x11] short io.netty.buffer.UnpooledDirectByteBuf._getShortLE(int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
void io.netty.buffer.UnpooledDirectByteBuf._setInt(int, int) failed to verify: void io.netty.buffer.UnpooledDirectByteBuf._setInt(int, int): [0x11] void io.netty.buffer.UnpooledDirectByteBuf._setInt(int, int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
void io.netty.buffer.UnpooledDirectByteBuf._setIntLE(int, int) failed to verify: void io.netty.buffer.UnpooledDirectByteBuf._setIntLE(int, int): [0x11] void io.netty.buffer.UnpooledDirectByteBuf._setIntLE(int, int): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
void io.netty.buffer.UnpooledDirectByteBuf._setLong(int, long) failed to verify: void io.netty.buffer.UnpooledDirectByteBuf._setLong(int, long): [0x11] void io.netty.buffer.UnpooledDirectByteBuf._setLong(int, long): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
void io.netty.buffer.UnpooledDirectByteBuf._setLongLE(int, long) failed to verify: void io.netty.buffer.UnpooledDirectByteBuf._setLongLE(int, long): [0x11] void io.netty.buffer.UnpooledDirectByteBuf._setLongLE(int, long): [0x11] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
void io.netty.buffer.UnpooledDirectByteBuf._setShort(int, int) failed to verify: void io.netty.buffer.UnpooledDirectByteBuf._setShort(int, int): [0x12] void io.netty.buffer.UnpooledDirectByteBuf._setShort(int, int): [0x12] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[]
void io.netty.buffer.UnpooledDirectByteBuf._setShortLE(int, int) failed to verify: void io.netty.buffer.UnpooledDirectByteBuf._setShortLE(int, int): [0x12] void io.netty.buffer.UnpooledDirectByteBuf._setShortLE(int, int): [0x12] register v3 has type Reference: java.nio.ByteBuffer but expected Reference: java.lang.Object[] (declaration of 'io.netty.buffer.UnpooledDirectByteBuf' appears in /data/app/com.sample.app-HXtH4pA7WR7DkdY6DBm0Eg==/base.apk!classes34.dex)
at io.netty.buffer.ByteBuf io.netty.buffer.UnpooledByteBufAllocator.newDirectBuffer(int, int) (UnpooledByteBufAllocator.java:95)
at io.netty.buffer.ByteBuf io.netty.buffer.AbstractByteBufAllocator.directBuffer(int, int) (AbstractByteBufAllocator.java:188)
at io.netty.buffer.ByteBuf io.netty.buffer.AbstractByteBufAllocator.directBuffer(int) (AbstractByteBufAllocator.java:179)
at io.netty.buffer.ByteBuf io.netty.buffer.Unpooled.directBuffer(int) (Unpooled.java:128)
at void io.netty.handler.codec.http.HttpObjectEncoder.() (HttpObjectEncoder.java:62)
at void org.littleshoot.proxy.impl.ClientToProxyConnection.initChannelPipeline(io.netty.channel.ChannelPipeline) (ClientToProxyConnection.java:796)
at void org.littleshoot.proxy.impl.ClientToProxyConnection.(org.littleshoot.proxy.impl.DefaultHttpProxyServer, org.littleshoot.proxy.SslEngineSource, boolean, io.netty.channel.ChannelPipeline, io.netty.handler.traffic.GlobalTrafficShapingHandler) (ClientToProxyConnection.java:152)
at void org.littleshoot.proxy.impl.DefaultHttpProxyServer$2.initChannel(io.netty.channel.Channel) (DefaultHttpProxyServer.java:517)
at boolean io.netty.channel.ChannelInitializer.initChannel(io.netty.channel.ChannelHandlerContext) (ChannelInitializer.java:128)
at void io.netty.channel.ChannelInitializer.handlerAdded(io.netty.channel.ChannelHandlerContext) (ChannelInitializer.java:111)
at void io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded() (AbstractChannelHandlerContext.java:999)
at void io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(io.netty.channel.AbstractChannelHandlerContext) (DefaultChannelPipeline.java:558)
at void io.netty.channel.DefaultChannelPipeline.access$100(io.netty.channel.DefaultChannelPipeline, io.netty.channel.AbstractChannelHandlerContext) (DefaultChannelPipeline.java:45)
at void io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute() (DefaultChannelPipeline.java:1482)
at void io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers() (DefaultChannelPipeline.java:1136)
at void io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded() (DefaultChannelPipeline.java:599)
at void io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(io.netty.channel.ChannelFuture) (AbstractChannel.java:383)
at void io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(io.netty.util.concurrent.Future) (AbstractChannel.java:374)
at void io.netty.util.concurrent.DefaultPromise.notifyListener0(io.netty.util.concurrent.Future, io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:603)
at void io.netty.util.concurrent.DefaultPromise.notifyListenersNow() (DefaultPromise.java:570)
at void io.netty.util.concurrent.DefaultPromise.notifyListeners() (DefaultPromise.java:505)
at boolean io.netty.util.concurrent.DefaultPromise.setValue0(java.lang.Object) (DefaultPromise.java:649)
at boolean io.netty.util.concurrent.DefaultPromise.setSuccess0(java.lang.Object) (DefaultPromise.java:638)
at io.netty.util.concurrent.Promise io.netty.util.concurrent.DefaultPromise.setSuccess(java.lang.Object) (DefaultPromise.java:110)
at io.netty.channel.ChannelPromise io.netty.channel.DefaultChannelPromise.setSuccess(java.lang.Void) (DefaultChannelPromise.java:78)
at io.netty.channel.ChannelPromise io.netty.channel.DefaultChannelPromise.setSuccess() (DefaultChannelPromise.java:73)
at void io.netty.channel.nio.AbstractNioChannel.lambda$doRegister$0$io-netty-channel-nio-AbstractNioChannel(io.netty.channel.ChannelPromise, io.netty.util.concurrent.Future) (AbstractNioChannel.java:465)
at void io.netty.channel.nio.AbstractNioChannel$$ExternalSyntheticLambda0.operationComplete(io.netty.util.concurrent.Future) (D8$$SyntheticClass:0)
at void io.netty.util.concurrent.DefaultPromise.notifyListener0(io.netty.util.concurrent.Future, io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:603)
at void io.netty.util.concurrent.DefaultPromise.notifyListenersNow() (DefaultPromise.java:570)
at void io.netty.util.concurrent.DefaultPromise.notifyListeners() (DefaultPromise.java:505)
at io.netty.util.concurrent.Promise io.netty.util.concurrent.DefaultPromise.addListener(io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:198)
at io.netty.util.concurrent.Future io.netty.util.concurrent.DefaultPromise.addListener(io.netty.util.concurrent.GenericFutureListener) (DefaultPromise.java:36)
at void io.netty.channel.nio.AbstractNioChannel.doRegister(io.netty.channel.ChannelPromise) (AbstractNioChannel.java:462)
at void io.netty.channel.AbstractChannel$AbstractUnsafe.register0(io.netty.channel.ChannelPromise) (AbstractChannel.java:408)
at void io.netty.channel.AbstractChannel$AbstractUnsafe.access$300(io.netty.channel.AbstractChannel$AbstractUnsafe, io.netty.channel.ChannelPromise) (AbstractChannel.java:288)
at void io.netty.channel.AbstractChannel$AbstractUnsafe$1.run() (AbstractChannel.java:352)
at void io.netty.util.concurrent.AbstractEventExecutor.runTask(java.lang.Runnable) (AbstractEventExecutor.java:148)
at void io.netty.util.concurrent.AbstractEventExecutor.safeExecute(java.lang.Runnable) (AbstractEventExecutor.java:141)
at boolean io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(long) (SingleThreadEventExecutor.java:535)
at void io.netty.channel.SingleThreadIoEventLoop.run() (SingleThreadIoEventLoop.java:201)
at void io.netty.util.concurrent.SingleThreadEventExecutor$5.run() (SingleThreadEventExecutor.java:1193)
at void io.netty.util.internal.ThreadExecutorMap$2.run() (ThreadExecutorMap.java:74)
at void java.lang.Thread.run() (Thread.java:919)

This issue is seen on Android 8/9/10/11/12 versions, but not seen on Android 13/14/15/16 versions.
Please check whether this is a known issue as part of netty 4.2.4 on specific android platforms.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions