]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
don't send very large dtmf strings or block on very large dtmf strings.
authorMichael Jerris <mike@jerris.com>
Mon, 14 Jan 2008 21:27:40 +0000 (21:27 +0000)
committerMichael Jerris <mike@jerris.com>
Mon, 14 Jan 2008 21:27:40 +0000 (21:27 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7221 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_core_io.c
src/switch_rtp.c

index 073ae2c826f23b3b60c394f181c749319417f146..cc70dbab00483ea81db1079612f2aed777e14fe1 100644 (file)
@@ -973,6 +973,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_send_dtmf_string(switch_core
                return SWITCH_STATUS_FALSE;
        }
 
+       if (strlen(dtmf_string) > 99) {
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Attempt to send very large dtmf string ignored!\n");
+               return SWITCH_STATUS_FALSE;
+       }
+
        string = switch_core_session_strdup(session, dtmf_string);
        argc = switch_separate_string(string, '+', argv, (sizeof(argv) / sizeof(argv[0])));
        
index b2bd47919d092f7b72a174311fc97d4b25ba85ec..be903f4428fc6cc42fe246ac1ff8f8d012bcfb32 100644 (file)
@@ -1202,7 +1202,10 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_queue_rfc2833(switch_rtp_t *rtp_sessi
 
        if ((rdigit = malloc(sizeof(*rdigit))) != 0) {
                *rdigit = *dtmf;
-               switch_queue_push(rtp_session->dtmf_data.dtmf_queue, rdigit);
+               if ((switch_queue_trypush(rtp_session->dtmf_data.dtmf_queue, rdigit)) != SWITCH_STATUS_SUCCESS) {
+                       free(rdigit);
+                       return SWITCH_STATUS_FALSE;
+               }
        } else {
                abort();
        }
@@ -1222,7 +1225,10 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_queue_rfc2833_in(switch_rtp_t *rtp_se
 
        if ((rdigit = malloc(sizeof(*rdigit))) != 0) {
                *rdigit = *dtmf;
-               switch_queue_push(rtp_session->dtmf_data.dtmf_inqueue, rdigit);
+               if ((switch_queue_trypush(rtp_session->dtmf_data.dtmf_inqueue, rdigit)) != SWITCH_STATUS_SUCCESS) {
+                       free(rdigit);
+                       return SWITCH_STATUS_FALSE;
+               }
        } else {
                abort();
        }