Fix a crash in app_queue with very long member lists.

A user reported via #asterisk that with very long lists of members, a crash
occurs in ast_strdupa, so just use a single buffer and ast_copy_string instead
of stack allocating copys of each interface name.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@191041 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Sean Bright
2009-04-29 15:23:07 +00:00
parent 7c82c2b240
commit 603a56aa69

View File

@@ -600,9 +600,9 @@ static int update_status(const char *interface, const int status)
ast_mutex_lock(&q->lock);
mem_iter = ao2_iterator_init(q->members, 0);
while ((cur = ao2_iterator_next(&mem_iter))) {
char *tmp_interface;
char tmp_interface[80];
char *slash_pos;
tmp_interface = ast_strdupa(cur->state_interface);
ast_copy_string(tmp_interface, cur->state_interface, sizeof(tmp_interface));
if ((slash_pos = strchr(tmp_interface, '/')))
if ((slash_pos = strchr(slash_pos + 1, '/')))
*slash_pos = '\0';
@@ -658,9 +658,9 @@ static void *handle_statechange(struct statechange *sc)
AST_LIST_LOCK(&interfaces);
AST_LIST_TRAVERSE(&interfaces, curint, list) {
char *interface;
char interface[80];
char *slash_pos;
interface = ast_strdupa(curint->interface);
ast_copy_string(interface, curint->interface, sizeof(interface));
if ((slash_pos = strchr(interface, '/')))
if ((slash_pos = strchr(slash_pos + 1, '/')))
*slash_pos = '\0';