diff options
author | madmaxoft <github@xoft.cz> | 2014-09-28 23:03:44 +0200 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2014-09-28 23:03:44 +0200 |
commit | 280831df264fe34a771fa16593e860037c5b4444 (patch) | |
tree | 231dcc3f452984ad975755ab4813812280c51636 /src/Protocol | |
parent | Revert "1.8: Fixed plugin messages." (diff) | |
download | cuberite-280831df264fe34a771fa16593e860037c5b4444.tar cuberite-280831df264fe34a771fa16593e860037c5b4444.tar.gz cuberite-280831df264fe34a771fa16593e860037c5b4444.tar.bz2 cuberite-280831df264fe34a771fa16593e860037c5b4444.tar.lz cuberite-280831df264fe34a771fa16593e860037c5b4444.tar.xz cuberite-280831df264fe34a771fa16593e860037c5b4444.tar.zst cuberite-280831df264fe34a771fa16593e860037c5b4444.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Protocol/Protocol18x.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/Protocol/Protocol18x.cpp b/src/Protocol/Protocol18x.cpp index 3985f5224..1070a8434 100644 --- a/src/Protocol/Protocol18x.cpp +++ b/src/Protocol/Protocol18x.cpp @@ -989,7 +989,10 @@ void cProtocol180::SendPluginMessage(const AString & a_Channel, const AString & cPacketizer Pkt(*this, 0x3f); Pkt.WriteString(a_Channel); - Pkt.WriteVarInt((UInt32)a_Message.size()); + if (a_Channel.substr(0, 3) == "MC|") + { + Pkt.WriteVarInt((UInt32)a_Message.size()); + } Pkt.WriteBuf(a_Message.data(), a_Message.size()); } @@ -2321,12 +2324,18 @@ void cProtocol180::HandlePacketPlayerPosLook(cByteBuffer & a_ByteBuffer) void cProtocol180::HandlePacketPluginMessage(cByteBuffer & a_ByteBuffer) { HANDLE_READ(a_ByteBuffer, ReadVarUTF8String, AString, Channel); - HANDLE_READ(a_ByteBuffer, ReadVarInt, UInt32, DataLen); AString Data; - if (!a_ByteBuffer.ReadString(Data, DataLen)) + if (Channel.substr(0, 3) == "MC|") { - return; + // Vanilla sends the payload length within the payload itself, so skip it: + HANDLE_READ(a_ByteBuffer, ReadVarInt, UInt32, DataLen); + if (DataLen != a_ByteBuffer.GetReadableSpace() - 1) + { + ASSERT(!"Bad plugin message payload length"); + return; + } } + a_ByteBuffer.ReadString(Data, a_ByteBuffer.GetReadableSpace() - 1); // Always succeeds m_Client->HandlePluginMessage(Channel, Data); } |