From: Sean Bright Date: Wed, 29 Apr 2009 15:23:07 +0000 (+0000) Subject: Fix a crash in app_queue with very long member lists. X-Git-Tag: 1.4.25-rc1~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=603a56aa69c8c54cb09bbc1b10646a94d8f15221;p=thirdparty%2Fasterisk.git 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 --- diff --git a/apps/app_queue.c b/apps/app_queue.c index e7d21be7ac..1af6670978 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -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';