diff --git a/broker/src/main/java/io/moquette/server/netty/NettyMQTTHandler.java b/broker/src/main/java/io/moquette/server/netty/NettyMQTTHandler.java index c4091e5a..793e77de 100644 --- a/broker/src/main/java/io/moquette/server/netty/NettyMQTTHandler.java +++ b/broker/src/main/java/io/moquette/server/netty/NettyMQTTHandler.java @@ -28,6 +28,8 @@ import org.slf4j.LoggerFactory; import static io.netty.channel.ChannelFutureListener.CLOSE_ON_FAILURE; import static io.netty.handler.codec.mqtt.MqttQoS.AT_MOST_ONCE; +import java.io.IOException; + @Sharable public class NettyMQTTHandler extends ChannelInboundHandlerAdapter { @@ -39,8 +41,11 @@ public class NettyMQTTHandler extends ChannelInboundHandlerAdapter { } @Override - public void channelRead(ChannelHandlerContext ctx, Object message) { + public void channelRead(ChannelHandlerContext ctx, Object message) throws Exception { MqttMessage msg = (MqttMessage) message; + if (msg.fixedHeader() == null) { + throw new IOException("Unknown packet"); + } MqttMessageType messageType = msg.fixedHeader().messageType(); LOG.debug("Processing MQTT message, type: {}", messageType); try { diff --git a/broker/src/main/java/io/moquette/server/netty/metrics/MQTTMessageLogger.java b/broker/src/main/java/io/moquette/server/netty/metrics/MQTTMessageLogger.java index ec1d284b..85519d08 100644 --- a/broker/src/main/java/io/moquette/server/netty/metrics/MQTTMessageLogger.java +++ b/broker/src/main/java/io/moquette/server/netty/metrics/MQTTMessageLogger.java @@ -25,6 +25,7 @@ import io.netty.handler.codec.mqtt.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; import java.util.List; import static io.moquette.spi.impl.Utils.messageId; @@ -40,16 +41,19 @@ public class MQTTMessageLogger extends ChannelDuplexHandler { private static final Logger LOG = LoggerFactory.getLogger("messageLogger"); @Override - public void channelRead(ChannelHandlerContext ctx, Object message) { + public void channelRead(ChannelHandlerContext ctx, Object message) throws Exception { logMQTTMessage(ctx, message, "C->B"); ctx.fireChannelRead(message); } - private void logMQTTMessage(ChannelHandlerContext ctx, Object message, String direction) { + private void logMQTTMessage(ChannelHandlerContext ctx, Object message, String direction) throws Exception { if (!(message instanceof MqttMessage)) { return; } MqttMessage msg = (MqttMessage) message; + if (msg.fixedHeader() == null) { + throw new IOException("Unknown packet"); + } String clientID = NettyUtils.clientID(ctx.channel()); MqttMessageType messageType = msg.fixedHeader().messageType(); switch (messageType) {