From bc2a7ee36f957f7646533cd960beac6ef1a5c6b6 Mon Sep 17 00:00:00 2001 From: russell Date: Tue, 5 Jun 2007 16:56:36 +0000 Subject: Fix a problem that showed itself by causing Zap channel names to be completely bogus on my machine. ast_safe_string_alloc() was broken. It called vsnprintf() on a va_args list twice without re-initializing it. After the first usage, va_end() and va_start() must be called again. git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@67360 f38db490-d61c-443f-a65b-d21fe96a405b --- main/channel.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'main') diff --git a/main/channel.c b/main/channel.c index d830f1f8b..71214a0e4 100644 --- a/main/channel.c +++ b/main/channel.c @@ -427,15 +427,20 @@ static int ast_check_hangup_locked(struct ast_channel *chan) /*! \brief printf the string into a correctly sized mallocd buffer, and return the buffer */ char *ast_safe_string_alloc(const char *fmt, ...) { - char *b2,buf[1]; + char *b2, buf[1]; int len; - va_list args; + va_start(args, fmt); len = vsnprintf(buf, 1, fmt, args); - b2 = ast_malloc(len+1); - vsnprintf(b2, len+1, fmt, args); va_end(args); + + b2 = ast_malloc(len + 1); + + va_start(args, fmt); + vsnprintf(b2, len + 1, fmt, args); + va_end(args); + return b2; } -- cgit v1.2.3