diff --git a/codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java b/codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java index 71065ef66b..8db7c3360f 100644 --- a/codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java +++ b/codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java @@ -98,6 +98,7 @@ public final class MqttDecoder extends ReplayingDecoder { final Result decodedVariableHeader = decodeVariableHeader(ctx, buffer, mqttFixedHeader); variableHeader = decodedVariableHeader.value; if (bytesRemainingInVariablePart > maxBytesInMessage) { + buffer.skipBytes(buffer.readableBytes()); throw new TooLongFrameException("too large message: " + bytesRemainingInVariablePart + " bytes"); } bytesRemainingInVariablePart -= decodedVariableHeader.numberOfBytesConsumed; diff --git a/codec-mqtt/src/test/java/io/netty/handler/codec/mqtt/MqttCodecTest.java b/codec-mqtt/src/test/java/io/netty/handler/codec/mqtt/MqttCodecTest.java index 23e40f0140..943c284e85 100644 --- a/codec-mqtt/src/test/java/io/netty/handler/codec/mqtt/MqttCodecTest.java +++ b/codec-mqtt/src/test/java/io/netty/handler/codec/mqtt/MqttCodecTest.java @@ -334,6 +334,8 @@ public class MqttCodecTest { assertEquals("Expected one object but got " + out.size(), 1, out.size()); + assertEquals(0, byteBuf.readableBytes()); + final MqttMessage decodedMessage = (MqttMessage) out.get(0); validateFixedHeaders(message.fixedHeader(), decodedMessage.fixedHeader()); @@ -356,6 +358,8 @@ public class MqttCodecTest { assertEquals("Expected one object but got " + out.size(), 1, out.size()); + assertEquals(0, byteBuf.readableBytes()); + final MqttMessage decodedMessage = (MqttMessage) out.get(0); validateFixedHeaders(message.fixedHeader(), decodedMessage.fixedHeader()); @@ -378,6 +382,8 @@ public class MqttCodecTest { assertEquals("Expected one object but got " + out.size(), 1, out.size()); + assertEquals(0, byteBuf.readableBytes()); + final MqttMessage decodedMessage = (MqttMessage) out.get(0); validateFixedHeaders(message.fixedHeader(), decodedMessage.fixedHeader()); validateDecoderExceptionTooLargeMessage(decodedMessage); @@ -397,6 +403,8 @@ public class MqttCodecTest { assertEquals("Expected one object but got " + out.size(), 1, out.size()); + assertEquals(0, byteBuf.readableBytes()); + final MqttMessage decodedMessage = (MqttMessage) out.get(0); validateFixedHeaders(message.fixedHeader(), decodedMessage.fixedHeader()); @@ -419,6 +427,8 @@ public class MqttCodecTest { assertEquals("Expected one object but got " + out.size(), 1, out.size()); + assertEquals(0, byteBuf.readableBytes()); + final MqttMessage decodedMessage = (MqttMessage) out.get(0); validateFixedHeaders(message.fixedHeader(), decodedMessage.fixedHeader()); validateMessageIdVariableHeader(message.variableHeader(), @@ -440,6 +450,8 @@ public class MqttCodecTest { assertEquals("Expected one object but got " + out.size(), 1, out.size()); + assertEquals(0, byteBuf.readableBytes()); + final MqttMessage decodedMessage = (MqttMessage) out.get(0); validateFixedHeaders(message.fixedHeader(), decodedMessage.fixedHeader()); validateMessageIdVariableHeader(message.variableHeader(), @@ -461,6 +473,8 @@ public class MqttCodecTest { assertEquals("Expected one object but got " + out.size(), 1, out.size()); + assertEquals(0, byteBuf.readableBytes()); + final MqttMessage decodedMessage = (MqttMessage) out.get(0); validateFixedHeaders(message.fixedHeader(), decodedMessage.fixedHeader()); validateMessageIdVariableHeader(message.variableHeader(),