diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-06-05 16:56:36 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-06-05 16:56:36 +0000 |
commit | bc2a7ee36f957f7646533cd960beac6ef1a5c6b6 (patch) | |
tree | 8f76162b52f72f574c6c31bb8971b26b1c612036 /main | |
parent | 5aee798842115e21ee3b9e3f4e45a10bcf82ac98 (diff) |
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
Diffstat (limited to 'main')
-rw-r--r-- | main/channel.c | 13 |
1 files changed, 9 insertions, 4 deletions
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; } |