From 8dd61df7ac5bb7babe444533c26c5f40b1a49477 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 16 Feb 2021 20:38:15 +0000 Subject: [PATCH] Fixed server crash on truncated varint in packet header --- src/network/mcpe/protocol/serializer/PacketBatch.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/network/mcpe/protocol/serializer/PacketBatch.php b/src/network/mcpe/protocol/serializer/PacketBatch.php index 13f3716e46..e64a31b1ea 100644 --- a/src/network/mcpe/protocol/serializer/PacketBatch.php +++ b/src/network/mcpe/protocol/serializer/PacketBatch.php @@ -26,6 +26,7 @@ namespace pocketmine\network\mcpe\protocol\serializer; use pocketmine\network\mcpe\protocol\Packet; use pocketmine\network\mcpe\protocol\PacketDecodeException; use pocketmine\network\mcpe\protocol\PacketPool; +use pocketmine\utils\BinaryDataException; class PacketBatch{ @@ -44,7 +45,11 @@ class PacketBatch{ public function getPackets(PacketPool $packetPool, int $max) : \Generator{ $serializer = new PacketSerializer($this->buffer); for($c = 0; $c < $max and !$serializer->feof(); ++$c){ - yield $c => $packetPool->getPacket($serializer->getString()); + try{ + yield $c => $packetPool->getPacket($serializer->getString()); + }catch(BinaryDataException $e){ + throw new PacketDecodeException("Error decoding packet $c of batch: " . $e->getMessage(), 0, $e); + } } if(!$serializer->feof()){ throw new PacketDecodeException("Reached limit of $max packets in a single batch");