@@ -119,29 +119,35 @@ public void messageReceived(NextFilter nextFilter, IoSession session, Object obj
119119 log .warn ("Client was rejected due to invalid handshake" );
120120 conn .close ();
121121 }
122+ } else {
123+ // don't fall through to connected process if we didn't have enough for the handshake
124+ break ;
122125 }
123126 // allow fall-through
124127 case RTMP .STATE_CONNECTED :
125- IoBuffer message = buffer .getBufferAsIoBuffer ();
126- // assuming majority of connections will not be encrypted
127- if (!((RTMPConnection ) conn ).isEncrypted ()) {
128- log .trace ("Receiving message: {}" , message );
129- nextFilter .messageReceived (session , message );
130- } else {
131- Cipher cipher = (Cipher ) session .getAttribute (RTMPConnection .RTMPE_CIPHER_IN );
132- if (cipher != null ) {
133- if (log .isDebugEnabled ()) {
134- log .debug ("Decrypting message: {}" , message );
135- }
136- byte [] encrypted = new byte [message .remaining ()];
137- message .get (encrypted );
138- message .free ();
139- byte [] plain = cipher .update (encrypted );
140- IoBuffer messageDecrypted = IoBuffer .wrap (plain );
141- if (log .isDebugEnabled ()) {
142- log .debug ("Receiving decrypted message: {}" , messageDecrypted );
128+ // skip empty buffer
129+ if (buffer .getBufferSize () > 0 ) {
130+ IoBuffer message = buffer .getBufferAsIoBuffer ();
131+ // assuming majority of connections will not be encrypted
132+ if (!((RTMPConnection ) conn ).isEncrypted ()) {
133+ log .trace ("Receiving message: {}" , message );
134+ nextFilter .messageReceived (session , message );
135+ } else {
136+ Cipher cipher = (Cipher ) session .getAttribute (RTMPConnection .RTMPE_CIPHER_IN );
137+ if (cipher != null ) {
138+ if (log .isDebugEnabled ()) {
139+ log .debug ("Decrypting message: {}" , message );
140+ }
141+ byte [] encrypted = new byte [message .remaining ()];
142+ message .get (encrypted );
143+ message .free ();
144+ byte [] plain = cipher .update (encrypted );
145+ IoBuffer messageDecrypted = IoBuffer .wrap (plain );
146+ if (log .isDebugEnabled ()) {
147+ log .debug ("Receiving decrypted message: {}" , messageDecrypted );
148+ }
149+ nextFilter .messageReceived (session , messageDecrypted );
143150 }
144- nextFilter .messageReceived (session , messageDecrypted );
145151 }
146152 }
147153 break ;
0 commit comments