kansifang / moquette-mqtt

Automatically exported from code.google.com/p/moquette-mqtt
Apache License 2.0
0 stars 0 forks source link

Moquette crashes with long payload under the same PublishMessage #4

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
When I try to send several Publish messages.

What is the expected output? What do you see instead?

What version of the product are you using? On what operating system?
Windows 7 64 bits Professional.  Java 7 SDK

Please provide any additional information below.
I am using the WMQTT Utility  as the client.  However when I try to single 
messages and topics with long payload the Moquette server crashes.  The same 
case happens when I used the Client class of the moquette project.  However, 
the same messages is well processed by mosquitto and RSMB SERVER 1.2

5163 [NioProcessor-2] INFO org.dna.mqtt.moquette.server.MQTTHandler - 
handleConnect invoked
5180 [NioProcessor-2] INFO SERVER LOG - SENT: HeapBuffer[pos=0 lim=0 cap=0: 
empty]
7645 [NioProcessor-2] INFO SERVER LOG - RECEIVED: type: PUBLISH, dup: false, 
QoS: 0, retain: false, remainingLen: 5828
7645 [NioProcessor-2] INFO SERVER LOG - RECEIVED: type: PUBREL, dup: true, QoS: 
2, retain: false, remainingLen: 100
10469 [NioProcessor-2] INFO SERVER LOG - RECEIVED: type: PUBLISH, dup: false, 
QoS: 0, retain: false, remainingLen: 5828
10469 [NioProcessor-2] INFO SERVER LOG - RECEIVED: type: CONNACK, dup: false, 
QoS: 0, retain: false, remainingLen: 119
10985 [NioProcessor-2] INFO SERVER LOG - RECEIVED: type: PUBLISH, dup: false, 
QoS: 0, retain: false, remainingLen: 5828
11500 [NioProcessor-2] INFO SERVER LOG - RECEIVED: type: PUBLISH, dup: false, 
QoS: 0, retain: false, remainingLen: 5828
11516 [NioProcessor-2] WARN org.apache.mina.core.service.IoHandlerAdapter - 
EXCEPTION, please implement 
org.dna.mqtt.moquette.server.MQTTHandler.exceptionCaught() for proper handling:
org.apache.mina.filter.codec.ProtocolDecoderException: 
java.lang.NegativeArraySizeException ( 6C 6F 20 77 ...)
    at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:251)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
    at org.dna.mqtt.moquette.proto.MQTTLoggingFilter.messageReceived(MQTTLoggingFilter.java:121)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
    at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:715)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1141)
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NegativeArraySizeException
    at org.dna.mqtt.moquette.proto.PublishDecoder.decode(PublishDecoder.java:46)
    at org.apache.mina.filter.codec.demux.DemuxingProtocolDecoder.doDecode(DemuxingProtocolDecoder.java:179)
    at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:178)
    at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:241)
    ... 19 more

Original issue reported on code.google.com by morales....@gmail.com on 13 Sep 2012 at 9:22

GoogleCodeExporter commented 9 years ago
This issue was closed by revision ecea97f4098f.

Original comment by selva.an...@gmail.com on 16 Sep 2012 at 3:23

GoogleCodeExporter commented 9 years ago
Bad calculation of remaining length in big PublishDecoder. When the size of 
remaining length was more than 1 byte wide, the extra bytes for its encoding 
wasn't taken into account in the owerall fullfilling and this cause a shifting 
into decoding next messages.

Fixed with 
https://code.google.com/p/moquette-mqtt/source/detail?r=ecea97f4098f8fa40da35b0b
06983cc0b90038cd

Original comment by selva.an...@gmail.com on 16 Sep 2012 at 3:25

GoogleCodeExporter commented 9 years ago
Just a small point, you should avoid using WMQTT Utility as it is deprecated 
and outdated, and does not support MQTT v3.1 protocol. The client included in 
Eclipse Paho is more modern.

Original comment by andypiperuk on 18 Sep 2012 at 9:49