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
This commit is contained in:
Tilghman Lesher
2008-02-28 14:42:32 +00:00
parent decec84c56
commit 557c38bc8d

View File

@@ -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) {