[asterisk-commits] seanbright: branch 1.6.0 r191424 - /branches/1.6.0/apps/app_queue.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri May 1 10:58:45 CDT 2009
Author: seanbright
Date: Fri May 1 10:58:40 2009
New Revision: 191424
URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=191424
Log:
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.
(Related to revision 191041 in branches/1.4)
Modified:
branches/1.6.0/apps/app_queue.c
Modified: branches/1.6.0/apps/app_queue.c
URL: http://svn.digium.com/svn-view/asterisk/branches/1.6.0/apps/app_queue.c?view=diff&rev=191424&r1=191423&r2=191424
==============================================================================
--- branches/1.6.0/apps/app_queue.c (original)
+++ branches/1.6.0/apps/app_queue.c Fri May 1 10:58:40 2009
@@ -696,15 +696,15 @@
struct member *cur;
struct ao2_iterator mem_iter, queue_iter;
struct call_queue *q;
+ char tmp_interface[80];
queue_iter = ao2_iterator_init(queues, 0);
while ((q = ao2_iterator_next(&queue_iter))) {
ao2_lock(q);
mem_iter = ao2_iterator_init(q->members, 0);
while ((cur = ao2_iterator_next(&mem_iter))) {
- char *tmp_interface;
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 (!strncasecmp(tmp_interface, "Local", 5) && (slash_pos = strchr(slash_pos + 1, '/')))
*slash_pos = '\0';
@@ -747,12 +747,12 @@
static void *handle_statechange(struct statechange *sc)
{
struct member_interface *curint;
+ char interface[80];
AST_LIST_LOCK(&interfaces);
AST_LIST_TRAVERSE(&interfaces, curint, list) {
- char *interface;
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';
More information about the asterisk-commits
mailing list