summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormadmaxoft <github@xoft.cz>2014-09-28 23:03:44 +0200
committermadmaxoft <github@xoft.cz>2014-09-28 23:03:44 +0200
commit280831df264fe34a771fa16593e860037c5b4444 (patch)
tree231dcc3f452984ad975755ab4813812280c51636
parentRevert "1.8: Fixed plugin messages." (diff)
downloadcuberite-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.cpp17
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);
}