From: Russell Bryant Date: Tue, 5 Jun 2007 16:56:36 +0000 (+0000) Subject: Fix a problem that showed itself by causing Zap channel names to be completely X-Git-Tag: 1.4.5~70 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6d6cd29a876f89a5869977d58aedc5c871592204;p=thirdparty%2Fasterisk.git 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: https://origsvn.digium.com/svn/asterisk/branches/1.4@67360 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/channel.c b/main/channel.c index d830f1f8b3..71214a0e45 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; }