From 3a137f63c55da587fbe27198aafff89fe273190d Mon Sep 17 00:00:00 2001 From: Manevolent Date: Wed, 4 Dec 2019 22:01:29 -0700 Subject: [PATCH] Increase maximum accepted reassembled packet size to 1MB, but continue to constrain directly received packet size at 65KB --- .../ts3j/protocol/packet/fragment/PacketReassembly.java | 2 +- .../protocol/socket/client/AbstractTeamspeakClientSocket.java | 2 +- src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/packet/fragment/PacketReassembly.java b/src/main/java/com/github/manevolent/ts3j/protocol/packet/fragment/PacketReassembly.java index 36ad7c6..fac4680 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/packet/fragment/PacketReassembly.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/packet/fragment/PacketReassembly.java @@ -92,7 +92,7 @@ public class PacketReassembly { reassemblyBuffer.position(0); if (firstPacket.getHeader().getPacketFlag(HeaderFlag.COMPRESSED)) - reassemblyBuffer = ByteBuffer.wrap(QuickLZ.decompress(reassemblyBuffer.array())); + reassemblyBuffer = ByteBuffer.wrap(QuickLZ.decompress(reassemblyBuffer.array(), 1024 * 1024)); reassembledPacket.readBody(reassemblyBuffer); diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java index 364c0be..b9353da 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java @@ -584,7 +584,7 @@ public abstract class AbstractTeamspeakClientSocket if (packet.getBody() instanceof PacketBodyCompressed) { Ts3Debugging.debug("[PROTOCOL] DECOMPRESS " + networkPacket.getHeader().getType().name()); - byte[] decompressed = QuickLZ.decompress(((PacketBodyCompressed) packet.getBody()).getCompressed()); + byte[] decompressed = QuickLZ.decompress(((PacketBodyCompressed) packet.getBody()).getCompressed(), 65535); packetBuffer = ByteBuffer .wrap(decompressed) diff --git a/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java b/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java index 0050dbe..d97d5a4 100644 --- a/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java +++ b/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java @@ -310,7 +310,7 @@ public final class QuickLZ a[i + j] = (byte)(value >>> (j * 8)); } - static public byte[] decompress(byte[] source) throws IOException { + static public byte[] decompress(byte[] source, int maximum) throws IOException { try { int level = (source[0] >>> 2) & 0x3; @@ -318,7 +318,7 @@ public final class QuickLZ throw new IllegalArgumentException("unsupported QuickLZ level: " + level); int size = (int) sizeDecompressed(source); - if (size > 65536) + if (size > maximum) throw new IllegalArgumentException("decompression too large: " + size); int src = headerLen(source);