diff --git a/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoder.java b/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoder.java index 5daf3567..15ecb6f3 100644 --- a/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoder.java +++ b/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoder.java @@ -51,7 +51,9 @@ class UnsubscribeDecoder extends DemuxDecoder { message.addTopic(Utils.decodeString(in)); readed = in.readerIndex()- start; } - + if (message.topics().isEmpty()) { + throw new CorruptedFrameException("unsubscribe MUST have got at least 1 topic"); + } out.add(message); } diff --git a/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoderTest.java b/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoderTest.java index 1f3c88e4..b5ca9b84 100644 --- a/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoderTest.java +++ b/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/UnsubscribeDecoderTest.java @@ -72,6 +72,15 @@ public class UnsubscribeDecoderTest { } + @Test(expected = CorruptedFrameException.class) + public void testFailOnEmptyTopic() throws Exception { + m_buff = Unpooled.buffer(4); + initMultiTopic(m_buff, 123); + + //Excercise + m_msgdec.decode(null, m_buff, m_results); + } + @Test public void testDecodeSingleTopic_bug() throws Exception { //A2 0C 00 01 00 06 2F 74 6F 70 69 63 //12 byte