From c4bdc09ac02495149c6ae84bff23e5efb17e6562 Mon Sep 17 00:00:00 2001 From: Phillipp Glanz <6745190+TheMeinerLP@users.noreply.github.com> Date: Mon, 28 Oct 2024 12:39:39 +0100 Subject: [PATCH] Fix potential protocol mismatch and exploit --- .../java/net/minestom/server/entity/Player.java | 15 +++++++++++++++ .../packet/server/common/PluginMessagePacket.java | 9 +++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 4967615440e..598173d7021 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -7,6 +7,7 @@ import net.kyori.adventure.identity.Identified; import net.kyori.adventure.identity.Identity; import net.kyori.adventure.inventory.Book; +import net.kyori.adventure.key.Key; import net.kyori.adventure.pointer.Pointers; import net.kyori.adventure.resource.ResourcePackCallback; import net.kyori.adventure.resource.ResourcePackInfo; @@ -904,8 +905,20 @@ public void sendMessage(final @NotNull Identity source, final @NotNull Component * * @param channel the message channel * @param data the message data + * @deprecated Use {@link #sendPluginMessage(Key, byte[])} instead. */ + @Deprecated(forRemoval = true, since = "1.5.0") public void sendPluginMessage(@NotNull String channel, byte @NotNull [] data) { + sendPluginMessage(Key.key(channel), data); + } + + /** + * Sends a plugin message to the player. + * + * @param channel the message channel + * @param data the message data + */ + public void sendPluginMessage(@NotNull Key channel, byte @NotNull [] data) { sendPacket(new PluginMessagePacket(channel, data)); } @@ -916,7 +929,9 @@ public void sendPluginMessage(@NotNull String channel, byte @NotNull [] data) { * * @param channel the message channel * @param message the message + * @deprecated Use {@link #sendPluginMessage(Key, byte[])} instead. */ + @Deprecated(forRemoval = true, since = "1.5.0") public void sendPluginMessage(@NotNull String channel, @NotNull String message) { sendPluginMessage(channel, message.getBytes(StandardCharsets.UTF_8)); } diff --git a/src/main/java/net/minestom/server/network/packet/server/common/PluginMessagePacket.java b/src/main/java/net/minestom/server/network/packet/server/common/PluginMessagePacket.java index ede91dd39d7..784c50a93ad 100644 --- a/src/main/java/net/minestom/server/network/packet/server/common/PluginMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/common/PluginMessagePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.common; +import net.kyori.adventure.key.Key; import net.minestom.server.MinecraftServer; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; @@ -9,15 +10,15 @@ import static net.minestom.server.network.NetworkBuffer.RAW_BYTES; import static net.minestom.server.network.NetworkBuffer.STRING; -public record PluginMessagePacket(String channel, +public record PluginMessagePacket(Key channel, byte[] data) implements ServerPacket.Configuration, ServerPacket.Play { public PluginMessagePacket(@NotNull NetworkBuffer reader) { - this(reader.read(STRING), reader.read(RAW_BYTES)); + this(Key.key(reader.read(STRING)), reader.read(RAW_BYTES)); } @Override public void write(@NotNull NetworkBuffer writer) { - writer.write(STRING, channel); + writer.write(STRING, channel.asString()); writer.write(RAW_BYTES, data); } @@ -41,6 +42,6 @@ public int playId() { public static @NotNull PluginMessagePacket getBrandPacket() { final String brandName = MinecraftServer.getBrandName(); final byte[] data = NetworkBuffer.makeArray(networkBuffer -> networkBuffer.write(STRING, brandName)); - return new PluginMessagePacket("minecraft:brand", data); + return new PluginMessagePacket(Key.key("minecraft:brand"), data); } }