CloudburstMC / Protocol

A protocol library for Minecraft Bedrock Edition
https://git.io/ProtocolLib
Apache License 2.0
307 stars 97 forks source link

Skin sizes got larger? Failing to decode animation image because maxSize cap. #230

Open Yexeed opened 1 month ago

Yexeed commented 1 month ago

Having this problem for around 2+ months. The decoder fails when trying to decode skin animation image with 128 128 4 cap, while the actual skin is having a 256 128 4 animation image size 🤔 Running on waterdog@1.20.80 release


org.cloudburstmc.protocol.bedrock.codec.PacketSerializeException: Error whilst deserializing PlayerListPacket(entries=SENSITIVE, action=ADD)
    at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:70) ~[Waterdog.jar:?]
    at dev.waterdog.waterdogpe.network.protocol.handler.ProxyBatchBridge.decodePacket(ProxyBatchBridge.java:92) ~[Waterdog.jar:?]
    at dev.waterdog.waterdogpe.network.protocol.handler.ProxyBatchBridge.onBedrockBatch(ProxyBatchBridge.java:56) ~[Waterdog.jar:?]
    at dev.waterdog.waterdogpe.network.connection.client.BedrockClientConnection.channelRead0(BedrockClientConnection.java:87) ~[Waterdog.jar:?]
    at dev.waterdog.waterdogpe.network.connection.client.BedrockClientConnection.channelRead0(BedrockClientConnection.java:57) ~[Waterdog.jar:?]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.ProxyInboundRouter.channelRead(ProxyInboundRouter.java:66) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.common.EncapsulatedToMessageHandler.channelRead0(EncapsulatedToMessageHandler.java:15) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.common.EncapsulatedToMessageHandler.channelRead0(EncapsulatedToMessageHandler.java:8) ~[Waterdog.jar:?]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.AdvancedChannelInboundHandler.channelRead(AdvancedChannelInboundHandler.java:48) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.AdvancedChannelInboundHandler.channelRead(AdvancedChannelInboundHandler.java:48) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.AdvancedChannelInboundHandler.channelRead(AdvancedChannelInboundHandler.java:48) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.common.RakSessionCodec.onOrderedReceived(RakSessionCodec.java:353) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.common.RakSessionCodec.checkForOrdered(RakSessionCodec.java:334) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.common.RakSessionCodec.handleDatagram(RakSessionCodec.java:322) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.common.RakSessionCodec.channelRead(RakSessionCodec.java:218) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:102) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[Waterdog.jar:?]
    at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.AdvancedChannelInboundHandler.channelRead(AdvancedChannelInboundHandler.java:48) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at org.cloudburstmc.netty.handler.codec.raknet.client.RakClientProxyRouteHandler.channelRead(RakClientProxyRouteHandler.java:50) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[Waterdog.jar:?]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[Waterdog.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[Waterdog.jar:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[Waterdog.jar:?]
    at io.netty.channel.epoll.EpollDatagramChannel.connectedRead(EpollDatagramChannel.java:606) ~[Waterdog.jar:?]
    at io.netty.channel.epoll.EpollDatagramChannel.access$400(EpollDatagramChannel.java:56) ~[Waterdog.jar:?]
    at io.netty.channel.epoll.EpollDatagramChannel$EpollDatagramChannelUnsafe.epollInReady(EpollDatagramChannel.java:538) ~[Waterdog.jar:?]
    at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:499) ~[Waterdog.jar:?]
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:397) ~[Waterdog.jar:?]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[Waterdog.jar:?]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[Waterdog.jar:?]
    at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.IllegalArgumentException: Tried to read 131072 bytes but maximum is 65536
    at org.cloudburstmc.protocol.common.util.Preconditions.checkArgument(Preconditions.java:291) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.BaseBedrockCodecHelper.readByteArray(BaseBedrockCodecHelper.java:86) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v388.BedrockCodecHelper_v388.readImage(BedrockCodecHelper_v388.java:97) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v419.BedrockCodecHelper_v419.readAnimationData(BedrockCodecHelper_v419.java:49) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v568.BedrockCodecHelper_v568.lambda$readSkin$0(BedrockCodecHelper_v568.java:32) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.BaseBedrockCodecHelper.readArray(BaseBedrockCodecHelper.java:221) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.BaseBedrockCodecHelper.readArray(BaseBedrockCodecHelper.java:212) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v568.BedrockCodecHelper_v568.readSkin(BedrockCodecHelper_v568.java:32) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerListSerializer_v390.readEntryBase(PlayerListSerializer_v390.java:79) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v649.serializer.PlayerListSerializer_v649.readEntryBase(PlayerListSerializer_v649.java:22) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerListSerializer_v390.deserialize(PlayerListSerializer_v390.java:46) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerListSerializer_v390.deserialize(PlayerListSerializer_v390.java:14) ~[Waterdog.jar:?]
    at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryDecode(BedrockCodec.java:68) ~[Waterdog.jar:?]
    ... 89 more```
CoolLoong commented 1 month ago

https://github.com/PowerNukkitX/WaterdogPE-PNX

you can refer to the change in this project to resolve