Author: stkn Date: Wed May 21 18:26:30 2008 New Revision: 8514 Modified: freeswitch/trunk/src/switch_ivr.c freeswitch/trunk/src/switch_loadable_module.c Log: Add safety check for codec implementations with bytes_per_frames being larger than the recommended buffer size (Klocwork #1039) Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Wed May 21 18:26:30 2008 @@ -487,6 +487,7 @@ if (switch_test_flag(read_frame, SFF_CNG)) { sendlen = read_codec->implementation->bytes_per_frame; + switch_assert(sendlen <= SWITCH_RECOMMENDED_BUFFER_SIZE); memset(decoded, 255, sendlen); sendbuf = decoded; tstatus = SWITCH_STATUS_SUCCESS; Modified: freeswitch/trunk/src/switch_loadable_module.c ============================================================================== --- freeswitch/trunk/src/switch_loadable_module.c (original) +++ freeswitch/trunk/src/switch_loadable_module.c Wed May 21 18:26:30 2008 @@ -154,13 +154,18 @@ for (impl = ptr->implementations; impl; impl = impl->next) { if (!impl->iananame) { load_interface = 0; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, + "Failed to load codec interface %s from %s due to no iana name in an implementation.\n", ptr->interface_name, key); + break; + } + if (impl->bytes_per_frame > SWITCH_RECOMMENDED_BUFFER_SIZE) { + load_interface = 0; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, + "Failed to load codec interface %s from %s due to bytes per frame exceeding buffer size.\n", ptr->interface_name, key); break; } } - if (!load_interface) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, - "Failed to load codec interface %s from %s due to no iana name in an implementation.\n", ptr->interface_name, key); - } else { + if (load_interface) { for (impl = ptr->implementations; impl; impl = impl->next) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Codec '%s' (%s) %dhz %dms\n",
participants (1)
-
Freeswitch SVN