[svn-commits] tilghman: trunk r104974 - /trunk/channels/chan_vpb.cc

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Feb 28 08:42:32 CST 2008


Author: tilghman
Date: Thu Feb 28 08:42:32 2008
New Revision: 104974

URL: http://svn.digium.com/view/asterisk?view=rev&rev=104974
Log:
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)

Modified:
    trunk/channels/chan_vpb.cc

Modified: trunk/channels/chan_vpb.cc
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_vpb.cc?view=diff&rev=104974&r1=104973&r2=104974
==============================================================================
--- trunk/channels/chan_vpb.cc (original)
+++ trunk/channels/chan_vpb.cc Thu Feb 28 08:42:32 2008
@@ -2706,6 +2706,18 @@
 	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 @@
 			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) {




More information about the svn-commits mailing list