From 308ef44c07acd33e80920f2134af7472d0221f4b Mon Sep 17 00:00:00 2001 From: Techcable Date: Fri, 18 Mar 2016 10:53:24 -0700 Subject: [PATCH] Better Decompression Sanity Fixes #40 diff --git a/proxy/src/main/java/net/md_5/bungee/compress/PacketDecompressor.java b/proxy/src/main/java/net/md_5/bungee/compress/PacketDecompressor.java index 445ee947..eaedf4bc 100644 --- a/proxy/src/main/java/net/md_5/bungee/compress/PacketDecompressor.java +++ b/proxy/src/main/java/net/md_5/bungee/compress/PacketDecompressor.java @@ -1,5 +1,7 @@ package net.md_5.bungee.compress; +import lombok.*; + import com.google.common.base.Preconditions; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; @@ -8,9 +10,11 @@ import java.util.List; import net.md_5.bungee.jni.zlib.BungeeZlib; import net.md_5.bungee.protocol.DefinedPacket; +@RequiredArgsConstructor public class PacketDecompressor extends MessageToMessageDecoder { + private final int compressionThreshold; private final BungeeZlib zlib = CompressFactory.zlib.newInstance(); @Override @@ -34,12 +38,13 @@ public class PacketDecompressor extends MessageToMessageDecoder out.add( in.retain() ); } else { + Preconditions.checkArgument( size >= compressionThreshold, "Decompressed size %s less than compression threshold %s", size, compressionThreshold); ByteBuf decompressed = ctx.alloc().directBuffer(); try { zlib.process( in, decompressed ); - Preconditions.checkState( decompressed.readableBytes() == size, "Decompressed packet size mismatch" ); + Preconditions.checkArgument( decompressed.readableBytes() == size, "Decompressed size %s is not equal to actual decompressed bytes", size, decompressed.readableBytes()); out.add( decompressed ); decompressed = null; diff --git a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java index 6be2d942..6dc5633f 100644 --- a/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java +++ b/proxy/src/main/java/net/md_5/bungee/netty/ChannelWrapper.java @@ -138,7 +138,7 @@ public class ChannelWrapper if ( ch.pipeline().get( PacketDecompressor.class ) == null && compressionThreshold != -1 ) { - addBefore( PipelineUtils.PACKET_DECODER, "decompress", new PacketDecompressor() ); + addBefore( PipelineUtils.PACKET_DECODER, "decompress", new PacketDecompressor(compressionThreshold) ); } if ( compressionThreshold == -1 ) { -- 2.30.1 (Apple Git-130)