]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5440: don't assert on bad input rtmp data
authorWilliam King <william.king@quentustech.com>
Wed, 22 May 2013 19:38:15 +0000 (12:38 -0700)
committerTravis Cross <tc@traviscross.com>
Fri, 7 Jun 2013 05:42:44 +0000 (05:42 +0000)
src/mod/endpoints/mod_rtmp/rtmp.c

index 3bf287605993b6ca90da6cee644c2f46e062eebf..74e7b95ae80a3cd7360dc07800e1d27e74790321 100644 (file)
@@ -794,7 +794,10 @@ switch_status_t rtmp_handle_data(rtmp_session_t *rsession)
                                        readbuf += (rsession->hdrsize - 1) - s;
                                }
                                
-                               switch_assert(s < 12 && s > 0); /** XXX **/
+                               if ( !(s < 12 && s > 0) ) { /** XXX **/
+                                       switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rsession->uuid), SWITCH_LOG_NOTICE, "Protocol error: Invalid header size\n");
+                                       return SWITCH_STATUS_FALSE;
+                               }
                                
                                if (rsession->profile->io->read(rsession, readbuf, &s) != SWITCH_STATUS_SUCCESS) {
                                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rsession->uuid), SWITCH_LOG_NOTICE, "Disconnected from flash client\n");
@@ -875,8 +878,11 @@ switch_status_t rtmp_handle_data(rtmp_session_t *rsession)
                                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rsession->uuid), SWITCH_LOG_ERROR, "Protocol error: exceeding max AMF packet size\n");
                                        return SWITCH_STATUS_FALSE;
                                }
-                               
-                               switch_assert(s <= rsession->in_chunksize);
+
+                               if (s > rsession->in_chunksize) {
+                                       switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rsession->uuid), SWITCH_LOG_ERROR, "Protocol error: invalid chunksize\n");
+                                       return SWITCH_STATUS_FALSE;                                     
+                               }
                                
                                if (rsession->profile->io->read(rsession, state->buf + state->buf_pos, &s) != SWITCH_STATUS_SUCCESS) {
                                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rsession->uuid), SWITCH_LOG_NOTICE, "Disconnected from flash client\n");