A backend's implementation of the realtime 'require' function may call
va_arg() and then fail, leaving the va_list in an undefined
state. Pass a copy of the va_list instead.
ASTERISK-29771 #close
Change-Id: I555565a72af84e96d49f62fe8cb66ba5a78461f4
struct ast_config_engine *eng;
char db[256];
char table[256];
- va_list ap;
+ va_list ap, aq;
int res = -1, i;
va_start(ap, family);
for (i = 1; ; i++) {
if ((eng = find_engine(family, i, db, sizeof(db), table, sizeof(table)))) {
+ va_copy(aq, ap);
/* If the require succeeds, it returns 0. */
- if (eng->require_func && !(res = eng->require_func(db, table, ap))) {
+ if (eng->require_func && !(res = eng->require_func(db, table, aq))) {
+ va_end(aq);
break;
}
+ va_end(aq);
} else {
break;
}