From 92f2e9730554b7762f91b835d26c91cdf900090d Mon Sep 17 00:00:00 2001 From: tilghman Date: Thu, 28 Feb 2008 14:42:32 +0000 Subject: 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: http://svn.digium.com/svn/asterisk/trunk@104974 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_vpb.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'channels/chan_vpb.cc') diff --git a/channels/chan_vpb.cc b/channels/chan_vpb.cc index 6458444ba..d943c542e 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) { -- cgit v1.2.3