From: Tilghman Lesher Date: Thu, 28 Feb 2008 14:42:32 +0000 (+0000) Subject: Fix crash when configuration does not match hardware detection. X-Git-Tag: 1.6.0-beta7~265 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=557c38bc8dc4e35fa597cdb8c92b05faeac4ce65;p=thirdparty%2Fasterisk.git Fix crash when configuration does not match hardware detection. (closes issue #12096) Reported by: mmickan Patches: chan_vpb.cc.diff uploaded by mmickan (license 400) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@104974 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_vpb.cc b/channels/chan_vpb.cc index 6458444ba1..d943c542ef 100644 --- a/channels/chan_vpb.cc +++ b/channels/chan_vpb.cc @@ -2706,6 +2706,18 @@ static enum ast_module_load_result load_module() int bal3 = -1; char * callerid = NULL; + int num_cards = 0; + try { + num_cards = vpb_get_num_cards(); + } catch (VpbException e) { + ast_log(LOG_ERROR, "No Voicetronix cards detected\n"); + return AST_MODULE_LOAD_DECLINE; + } + + int ports_per_card[num_cards]; + for (int i = 0; i < num_cards; ++i) + ports_per_card[i] = vpb_get_ports_per_card(i); + cfg = ast_config_load(config, config_flags); /* We *must* have a config file otherwise stop immediately */ @@ -2768,6 +2780,11 @@ static enum ast_module_load_result load_module() UseNativeBridge = atoi(v->value); } else if (strcasecmp(v->name, "channel") == 0) { int channel = atoi(v->value); + if (board >= num_cards || board < 0 || channel < 0 || channel >= ports_per_card[board]) { + ast_log(LOG_ERROR, "Invalid board/channel (%d/%d) for channel '%s'\n", board, channel, v->value); + error = AST_MODULE_LOAD_FAILURE; + goto done; + } tmp = mkif(board, channel, mode, got_gain, txgain, rxgain, txswgain, rxswgain, bal1, bal2, bal3, callerid, echo_cancel,group,callgroup,pickupgroup); if (tmp) { if (first_channel) {