pmmp / PocketMine-MP

A server software for Minecraft: Bedrock Edition in PHP
https://pmmp.io
GNU Lesser General Public License v3.0
3.25k stars 1.53k forks source link

Editing writable book causes packet processing error #5650

Closed dktapps closed 1 year ago

dktapps commented 1 year ago

Issue description

It appears that writing in a book generates a transaction, even though the change is already handled by BookEditPacket.

Since 4.18 expects that regular transactions will only be used for dropping items, this causes InGamePacketHandler to freak out and kick the player.

Sample packet trace:

[07:37:37.565] [Server thread/DEBUG]: [NetworkSession: mctestDylan] InventoryTransactionPacket: HgAAAwAAAIgIAQAAAABM//8BCgAACQUAcGFnZXMKAgAAAAgJAHBob3RvbmFtZQAACAQAdGV4dAAAAAgJAHBob3RvbmFtZQAACAQAdGV4dAAAAAAAAAAAAAAAAIgIAQAAAABR//8BCgAACQUAcGFnZXMKAgAAAAgJAHBob3RvbmFtZQAACAQAdGV4dAUAaGVsbG8ACAkAcGhvdG9uYW1lAAAIBAB0ZXh0AAAAAAAAAAAAAAAAAwAAiAgBAAAAAEz//wEKAAAJBQBwYWdlcwoCAAAACAkAcGhvdG9uYW1lAAAIBAB0ZXh0AAAACAkAcGhvdG9uYW1lAAAIBAB0ZXh0AAAAAAAAAAAAAAAAAwGICAEAAAAAUf//AQoAAAkFAHBhZ2VzCgIAAAAICQBwaG90b25hbWUAAAgEAHRleHQFAGhlbGxv
AAgJAHBob3RvbmFtZQAACAQAdGV4dAAAAAAAAAAAAAAAAAA=
[07:37:37.565] [Server thread/ERROR]: [NetworkSession: mctestDylan] Bad packet: Error processing InventoryTransactionPacket: Expected exactly 2 actions for dropping an item

Steps to reproduce the issue

  1. Get a writable book
  2. Write something in it
  3. Close the book's UI
  4. You're now kicked from the server

OS and versions

dktapps commented 1 year ago

Fixed by 811639f2cdfead34cc0412f9fc76584661226ebf.