From 26fe18efeeb9121455d23354b9f1869096a6ac6e Mon Sep 17 00:00:00 2001 From: Techcable Date: Tue, 3 May 2016 20:31:52 -0700 Subject: [PATCH] Don't access a ByteBuf's underlying array It returns the underlying array storage, and does *not* return a view of the buffer as an array diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java index 70b292f0..91f71c09 100644 --- a/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java +++ b/protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java @@ -3,6 +3,7 @@ package net.md_5.bungee.protocol.packet; import com.google.common.base.Function; import com.google.common.base.Preconditions; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; // Waterfall import java.io.ByteArrayInputStream; import java.io.DataInput; import java.io.DataInputStream; @@ -47,10 +48,23 @@ public class PluginMessage extends DefinedPacket return "legacy:" + tag.toLowerCase( Locale.ROOT ); } }; - // + + public PluginMessage(String tag, ByteBuf data, boolean allowExtendedPacket) { + this(tag, ByteBufUtil.getBytes(data), allowExtendedPacket); + } + private String tag; private byte[] data; + public void setData(byte[] data) { + this.data = Preconditions.checkNotNull(data, "Null data"); + } + + public void setData(ByteBuf buf) { + Preconditions.checkNotNull(buf, "Null buffer"); + setData(ByteBufUtil.getBytes(buf)); + } + /** * Allow this packet to be sent as an "extended" packet. */ diff --git a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java index 7ef4ee91..287a0545 100644 --- a/proxy/src/main/java/net/md_5/bungee/ServerConnector.java +++ b/proxy/src/main/java/net/md_5/bungee/ServerConnector.java @@ -266,7 +266,7 @@ public class ServerConnector extends PacketHandler ByteBuf brand = ByteBufAllocator.DEFAULT.heapBuffer(); DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")", brand ); - user.unsafe().sendPacket( new PluginMessage( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_13 ? "minecraft:brand" : "MC|Brand", DefinedPacket.toArray( brand ), handshakeHandler != null && handshakeHandler.isServerForge() ) ); + user.unsafe().sendPacket( new PluginMessage( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_13 ? "minecraft:brand" : "MC|Brand", brand, handshakeHandler != null && handshakeHandler.isServerForge() ) ); // Waterfall brand.release(); } diff --git a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java index 117ebb76..b8248ec4 100644 --- a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java +++ b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java @@ -300,7 +300,7 @@ public class DownstreamBridge extends PacketHandler brand = ByteBufAllocator.DEFAULT.heapBuffer(); DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")" + " <- " + serverBrand, brand ); - pluginMessage.setData( DefinedPacket.toArray( brand ) ); + pluginMessage.setData( brand ); brand.release(); // changes in the packet are ignored so we need to send it manually con.unsafe().sendPacket( pluginMessage ); diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java index 5b9c35d1..2d6885a9 100644 --- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java +++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java @@ -50,7 +50,7 @@ import net.md_5.bungee.protocol.Varint21LengthFieldPrepender; public class PipelineUtils { - public static final AttributeKey LISTENER = AttributeKey.valueOf( "ListerInfo" ); + public static final AttributeKey LISTENER = AttributeKey.newInstance( "ListerInfo" ); public static final ChannelInitializer SERVER_CHILD = new ChannelInitializer() { @Override -- 2.42.0