mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-04 12:12:48 +00:00
Merged revisions 203036 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r203036 | rmudgett | 2009-06-24 16:01:43 -0500 (Wed, 24 Jun 2009) | 8 lines Improved chan_dahdi.conf pritimer error checking. Valid format is: pritimer=timer_name,timer_value * Fixed segfault if the ',' is missing. * Completely check the range returned by pri_timer2idx() to prevent possible access outside array bounds. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@203037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -18220,22 +18220,34 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct
|
|||||||
#endif
|
#endif
|
||||||
} else if (!strcasecmp(v->name, "pritimer")) {
|
} else if (!strcasecmp(v->name, "pritimer")) {
|
||||||
#ifdef PRI_GETSET_TIMERS
|
#ifdef PRI_GETSET_TIMERS
|
||||||
char tmp[20], *timerc, *c = tmp;
|
char tmp[20];
|
||||||
int timer, timeridx;
|
char *timerc;
|
||||||
|
char *c;
|
||||||
|
int timer;
|
||||||
|
int timeridx;
|
||||||
|
|
||||||
ast_copy_string(tmp, v->value, sizeof(tmp));
|
ast_copy_string(tmp, v->value, sizeof(tmp));
|
||||||
|
c = tmp;
|
||||||
timerc = strsep(&c, ",");
|
timerc = strsep(&c, ",");
|
||||||
if (timerc) {
|
if (!ast_strlen_zero(timerc) && !ast_strlen_zero(c)) {
|
||||||
|
timeridx = pri_timer2idx(timerc);
|
||||||
timer = atoi(c);
|
timer = atoi(c);
|
||||||
if (!timer)
|
if (timeridx < 0 || PRI_MAX_TIMERS <= timeridx) {
|
||||||
ast_log(LOG_WARNING, "'%s' is not a valid value for an ISDN timer at line %d.\n", timerc, v->lineno);
|
ast_log(LOG_WARNING,
|
||||||
else {
|
"'%s' is not a valid ISDN timer at line %d.\n", timerc,
|
||||||
if ((timeridx = pri_timer2idx(timerc)) >= 0)
|
v->lineno);
|
||||||
|
} else if (!timer) {
|
||||||
|
ast_log(LOG_WARNING,
|
||||||
|
"'%s' is not a valid value for ISDN timer '%s' at line %d.\n",
|
||||||
|
c, timerc, v->lineno);
|
||||||
|
} else {
|
||||||
pritimers[timeridx] = timer;
|
pritimers[timeridx] = timer;
|
||||||
else
|
|
||||||
ast_log(LOG_WARNING, "'%s' is not a valid ISDN timer at line %d.\n", timerc, v->lineno);
|
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
ast_log(LOG_WARNING, "'%s' is not a valid ISDN timer configuration string at line %d.\n", v->value, v->lineno);
|
ast_log(LOG_WARNING,
|
||||||
|
"'%s' is not a valid ISDN timer configuration string at line %d.\n",
|
||||||
|
v->value, v->lineno);
|
||||||
|
}
|
||||||
#endif /* PRI_GETSET_TIMERS */
|
#endif /* PRI_GETSET_TIMERS */
|
||||||
} else if (!strcasecmp(v->name, "facilityenable")) {
|
} else if (!strcasecmp(v->name, "facilityenable")) {
|
||||||
confp->pri.facilityenable = ast_true(v->value);
|
confp->pri.facilityenable = ast_true(v->value);
|
||||||
|
Reference in New Issue
Block a user