mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-11-18 16:25:14 +01:00
Duplicate buf instead of Copy
This commit is contained in:
parent
2bea0705a5
commit
0891d8daee
@ -1,85 +0,0 @@
|
|||||||
From ac51cce7a1881d4247b90cfbdf5ebe286b6e6fbe Mon Sep 17 00:00:00 2001
|
|
||||||
From: LinsaFTW <25271111+linsaftw@users.noreply.github.com>
|
|
||||||
Date: Tue, 8 Mar 2022 23:02:29 -0300
|
|
||||||
Subject: [PATCH] Avoid Copying Bytebufs
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
||||||
index 3992f521..01504c75 100644
|
|
||||||
--- a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
||||||
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
|
||||||
@@ -52,7 +52,8 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- ByteBuf slice = in.copy(); // Can't slice this one due to EntityMap :(
|
|
||||||
+ // FlameCord - Avoid Copying Bytebufs
|
|
||||||
+ int oldReaderIndex = in.readerIndex();
|
|
||||||
|
|
||||||
Object packetTypeInfo = null;
|
|
||||||
try
|
|
||||||
@@ -92,8 +93,11 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
|
|
||||||
in.skipBytes( in.readableBytes() );
|
|
||||||
}
|
|
||||||
|
|
||||||
- out.add( new PacketWrapper( packet, slice ) );
|
|
||||||
- slice = null;
|
|
||||||
+ // Flamecord start - Avoid Copying Bytebufs
|
|
||||||
+ in.readerIndex(oldReaderIndex);
|
|
||||||
+ in = in.retain();
|
|
||||||
+ out.add( new PacketWrapper( packet, in ) );
|
|
||||||
+ // Flamecord end - Avoid Copying Bytebufs
|
|
||||||
} catch (BadPacketException | IndexOutOfBoundsException e) {
|
|
||||||
// Waterfall start: Additional DoS mitigations
|
|
||||||
if(!DEBUG) {
|
|
||||||
@@ -108,13 +112,11 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
|
|
||||||
} else {
|
|
||||||
packetTypeStr = "unknown";
|
|
||||||
}
|
|
||||||
- throw new FastDecoderException("Error decoding packet " + packetTypeStr + " with contents:\n" + ByteBufUtil.prettyHexDump(slice), e); // Waterfall
|
|
||||||
- } finally
|
|
||||||
- {
|
|
||||||
- if ( slice != null )
|
|
||||||
- {
|
|
||||||
- slice.release();
|
|
||||||
- }
|
|
||||||
+
|
|
||||||
+ // Flamecord start - Avoid Copying Bytebufs
|
|
||||||
+ in.readerIndex(oldReaderIndex);
|
|
||||||
+ throw new FastDecoderException("Error decoding packet " + packetTypeStr + " with contents:\n" + ByteBufUtil.prettyHexDump(in), e); // Waterfall
|
|
||||||
+ // Flamecord end - Avoid Copying Bytebufs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_7_6.java b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_7_6.java
|
|
||||||
index 5ce42f62..f32f7681 100644
|
|
||||||
--- a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_7_6.java
|
|
||||||
+++ b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_7_6.java
|
|
||||||
@@ -38,7 +38,8 @@ class EntityMap_1_7_6 extends EntityMap_1_7_2
|
|
||||||
if ( profile != null && profile.getProperties() != null
|
|
||||||
&& profile.getProperties().length >= 1 )
|
|
||||||
{
|
|
||||||
- ByteBuf rest = packet.copy();
|
|
||||||
+ // Flamecord - Avoid Copying Bytebufs
|
|
||||||
+ int oldReaderIndex = packet.readerIndex();
|
|
||||||
packet.readerIndex( readerIndex );
|
|
||||||
packet.writerIndex( readerIndex + packetIdLength + idLength );
|
|
||||||
DefinedPacket.writeString( player.getUniqueId().toString(), packet );
|
|
||||||
@@ -50,8 +51,12 @@ class EntityMap_1_7_6 extends EntityMap_1_7_2
|
|
||||||
DefinedPacket.writeString( property.getValue(), packet );
|
|
||||||
DefinedPacket.writeString( property.getSignature(), packet );
|
|
||||||
}
|
|
||||||
- packet.writeBytes( rest );
|
|
||||||
- rest.release();
|
|
||||||
+ // Flamecord start - Avoid Copying Bytebufs
|
|
||||||
+ int newReaderIndex = packet.readerIndex();
|
|
||||||
+ packet.readerIndex( oldReaderIndex );
|
|
||||||
+ packet.writeBytes( packet );
|
|
||||||
+ packet.readerIndex( newReaderIndex );
|
|
||||||
+ // Flamecord end - Avoid Copying Bytebufs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.32.0
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From 0c74e3dae65a16605b5faee82cac81a4dc72d933 Mon Sep 17 00:00:00 2001
|
||||||
|
From: LinsaFTW <25271111+linsaftw@users.noreply.github.com>
|
||||||
|
Date: Wed, 9 Mar 2022 14:36:43 -0300
|
||||||
|
Subject: [PATCH] Duplicate buf instead of Copy
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
||||||
|
index 3992f521..074d2437 100644
|
||||||
|
--- a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
||||||
|
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
|
||||||
|
@@ -52,7 +52,8 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- ByteBuf slice = in.copy(); // Can't slice this one due to EntityMap :(
|
||||||
|
+ // FlameCord - Duplicate buf instead of Copy
|
||||||
|
+ ByteBuf slice = in.duplicate(); // Can't slice this one due to EntityMap :(
|
||||||
|
|
||||||
|
Object packetTypeInfo = null;
|
||||||
|
try
|
||||||
|
@@ -92,7 +93,8 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
|
||||||
|
in.skipBytes( in.readableBytes() );
|
||||||
|
}
|
||||||
|
|
||||||
|
- out.add( new PacketWrapper( packet, slice ) );
|
||||||
|
+ // FlameCord - Duplicate buf instead of Copy
|
||||||
|
+ out.add( new PacketWrapper( packet, slice.retain() ) );
|
||||||
|
slice = null;
|
||||||
|
} catch (BadPacketException | IndexOutOfBoundsException e) {
|
||||||
|
// Waterfall start: Additional DoS mitigations
|
||||||
|
--
|
||||||
|
2.32.0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user