From 5c4d4e11b2329b221394f7b216c749edc00c57bf Mon Sep 17 00:00:00 2001 From: creeper123123321 Date: Thu, 17 Jan 2019 03:25:59 +0000 Subject: [PATCH] Don't use a bytebuf for packet decoding diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/Varint21FrameDecoder.java b/protocol/src/main/java/net/md_5/bungee/protocol/Varint21FrameDecoder.java index 98a54601..8de4d9be 100644 --- a/protocol/src/main/java/net/md_5/bungee/protocol/Varint21FrameDecoder.java +++ b/protocol/src/main/java/net/md_5/bungee/protocol/Varint21FrameDecoder.java @@ -24,8 +24,7 @@ public class Varint21FrameDecoder extends ByteToMessageDecoder { in.markReaderIndex(); - final byte[] buf = new byte[ 3 ]; - for ( int i = 0; i < buf.length; i++ ) + for ( int i = 0; i < 3; i++ ) // Waterfall { if ( !in.isReadable() ) { @@ -33,10 +32,13 @@ public class Varint21FrameDecoder extends ByteToMessageDecoder return; } - buf[i] = in.readByte(); - if ( buf[i] >= 0 ) + // Waterfall start + byte read = in.readByte(); + if ( read >= 0 ) { - int length = DefinedPacket.readVarInt( Unpooled.wrappedBuffer( buf ) ); + in.resetReaderIndex(); + int length = DefinedPacket.readVarInt( in ); + // Waterfall end if ( length == 0 && !allowEmptyPackets) // Waterfall { throw new CorruptedFrameException( "Empty Packet!" ); @@ -46,26 +48,11 @@ public class Varint21FrameDecoder extends ByteToMessageDecoder { in.resetReaderIndex(); return; - } else - { - if ( in.hasMemoryAddress() ) - { - out.add( in.slice( in.readerIndex(), length ).retain() ); - in.skipBytes( length ); - } else - { - if ( !DIRECT_WARNING ) - { - DIRECT_WARNING = true; - System.out.println( "Netty is not using direct IO buffers." ); - } - - // See https://github.com/SpigotMC/BungeeCord/issues/1717 - ByteBuf dst = ctx.alloc().directBuffer( length ); - in.readBytes( dst ); - out.add( dst ); - } + // Waterfall start + } else { + out.add(in.readRetainedSlice(length)); return; + // Waterfall end } } } -- 2.21.0