diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java index 8d4df6f3f..499ef1807 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java @@ -29,6 +29,7 @@ import org.cloudburstmc.protocol.bedrock.packet.CommandRequestPacket; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.text.MessageTranslator; @@ -38,7 +39,14 @@ public class BedrockCommandRequestTranslator extends PacketTranslator 512) { + // A legitimate player cannot send more than 512 characters + // This is necessary so that the conversion to plain text is not clogged + session.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.chat.too_long", session.locale(), command.length())); + return; + } + command = MessageTranslator.convertToPlainText(packet.getCommand()); handleCommand(session, MessageTranslator.normalizeSpace(command).substring(1)); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java index bac9b9ecc..6e657695b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.cloudburstmc.protocol.bedrock.packet.TextPacket; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.text.MessageTranslator; @@ -36,9 +37,24 @@ public class BedrockTextTranslator extends PacketTranslator { @Override public void translate(GeyserSession session, TextPacket packet) { + if (!(packet.getParameters().isEmpty())) { + // I don't know if the client sends something there on 1.1.5, the client doesn't send anything like that + // Add yourself for this text if you need it + session.disconnect(GeyserLocale.getPlayerLocaleString("geyser.chat.parameters", session.locale(), packet.getParameters().size())); + return; + } + + String message = packet.getMessage(); + if (message.length() > 512) { + // A legitimate player cannot send more than 512 characters + // This is necessary so that the conversion to plain text is not clogged + session.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.chat.too_long", session.locale(), message.length())); + return; + } + // Java trims all messages, and then checks for the leading slash - String message = MessageTranslator.convertToPlainText( - MessageTranslator.normalizeSpace(packet.getMessage()) + message = MessageTranslator.convertToPlainText( + MessageTranslator.normalizeSpace(message) ); if (message.isBlank()) {