Added code to automatically add a default case to switches that don't have one. In some cases, rather than fall thru, it results in a goto with -1 result, which terminates the extension; a sort of dialplan seqfault, sort of. This was required to fix bug reported in 9881

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@67420 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Steve Murphy 19 years ago
parent 9dd7be2f58
commit b698ff265b

@ -2208,6 +2208,33 @@ void check_switch_expr(pval *item, struct argapp *apps)
warns++;
}
}
#else
pval *t,*tl=0,*p2;
int def= 0;
/* first of all, does this switch have a default case ? */
for (t=item->u2.statements; t; t=t->next) {
if (t->type == PV_DEFAULT) {
def =1;
break;
}
tl = t;
}
if (def) /* nothing to check. All cases accounted for! */
return;
/* if no default, warn and insert a default case at the end */
p2 = tl->next = calloc(1, sizeof(struct pval));
p2->type = PV_DEFAULT;
p2->startline = tl->startline;
p2->endline = tl->endline;
p2->startcol = tl->startcol;
p2->endcol = tl->endcol;
p2->filename = strdup(tl->filename);
ast_log(LOG_WARNING,"Warning: file %s, line %d-%d: A default case was automatically added to the switch.\n",
p2->filename, p2->startline, p2->endline);
warns++;
#endif
}

Loading…
Cancel
Save