CloudburstMC / Protocol

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

PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket #149

Closed Flonja closed 2 years ago

Flonja commented 2 years ago

Cloudburst's Protocol tries to read values when PlayerBlockActionData::getAction() == PlayerActionType.STOP_BREAK, but most popular protocol libraries don't read anything if it's a PlayerActionType.STOP_BREAK

The most recent commits at the time of writing: CloudburstMC's Protocol pmmp's BedrockProtocol Sandertv's gophertunnel

Stacktrace:

com.nukkitx.protocol.bedrock.exception.PacketSerializeException: Error whilst deserializing PlayerAuthInputPacket(rotation=(36.403076, -20.125961, -20.125961), position=(214.3528, 70.076126, 206.3287), motion=(0.0, 0.0), inputData=[PERFORM_ITEM_INTERACTION, PERFORM_BLOCK_ACTIONS], inputMode=MOUSE, playMode=SCREEN, vrGazeDirection=null, tick=183, delta=(0.0, 0.0023533825, 0.0), itemUseTransaction=ItemUseTransaction(legacyRequestId=0, legacySlots=[], usingNetIds=false, actions=[], actionType=2, blockPosition=(215, 67, 209), blockFace=2, hotbarSlot=0, itemInHand=ItemData(id=12, damage=0, count=1, tag=null, canPlace=[], canBreak=[], blockingTicks=0, blockRuntimeId=6707, usingNetId=false, netId=0), playerPosition=(214.3528, 70.072205, 206.3287), clickPosition=(0.0, 0.0, 0.0), blockRuntimeId=0), itemStackRequest=null, playerActions=[PlayerBlockActionData(action=START_BREAK, blockPosition=(215, 67, 209), face=2), PlayerBlockActionData(action=STOP_BREAK, blockPosition=(18, 215, 67), face=209)])
    at com.nukkitx.protocol.bedrock.BedrockPacketCodec.tryDecode(BedrockPacketCodec.java:66) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.wrapper.BedrockWrapperSerializerV9_10.deserialize(BedrockWrapperSerializerV9_10.java:74) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockSession.onWrappedPacket(BedrockSession.java:283) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener.lambda$onEncapsulated$0(BedrockRakNetSessionListener.java:39) ~[Waterdog.jar:?]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) ~[Waterdog.jar:?]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469) ~[Waterdog.jar:?]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[Waterdog.jar:?]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[Waterdog.jar:?]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[Waterdog.jar:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.IndexOutOfBoundsException: readerIndex(127) + length(1) exceeds writerIndex(127): UnpooledSlicedByteBuf(ridx: 127, widx: 127, cap: 127/127, unwrapped: PooledUnsafeDirectByteBuf(ridx: 173, widx: 173, cap: 8192))
    at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1442) ~[Waterdog.jar:?]
    at io.netty.buffer.AbstractByteBuf.readByte(AbstractByteBuf.java:730) ~[Waterdog.jar:?]
    at com.nukkitx.network.VarInts.decode(VarInts.java:46) ~[Waterdog.jar:?]
    at com.nukkitx.network.VarInts.readInt(VarInts.java:14) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockPacketHelper.readVector3i(BedrockPacketHelper.java:359) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.v431.serializer.PlayerAuthInputSerializer_v431.readPlayerBlockActionData(PlayerAuthInputSerializer_v431.java:31) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.v428.serializer.PlayerAuthInputSerializer_v428.deserialize(PlayerAuthInputSerializer_v428.java:99) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.v428.serializer.PlayerAuthInputSerializer_v428.deserialize(PlayerAuthInputSerializer_v428.java:17) ~[Waterdog.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockPacketCodec.tryDecode(BedrockPacketCodec.java:64) ~[Waterdog.jar:?]
    ... 9 more
Alemiz112 commented 2 years ago

I think this was fixed in v3 but was not ported over to v2. I will have a look.

Flonja commented 2 years ago

Fixed in https://github.com/CloudburstMC/Protocol/commit/47f92068b206bfaa7114862457c97dc478c5bbb0