From 702cb032317f9e9b2e39b2eb87465feaf972a760 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Mon, 14 Jan 2008 21:27:40 +0000 Subject: [PATCH] don't send very large dtmf strings or block on very large dtmf strings. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7221 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_core_io.c | 5 +++++ src/switch_rtp.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/switch_core_io.c b/src/switch_core_io.c index 073ae2c826..cc70dbab00 100644 --- a/src/switch_core_io.c +++ b/src/switch_core_io.c @@ -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]))); diff --git a/src/switch_rtp.c b/src/switch_rtp.c index b2bd47919d..be903f4428 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -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(); }