aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-06-05 16:56:36 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-06-05 16:56:36 +0000
commitbc2a7ee36f957f7646533cd960beac6ef1a5c6b6 (patch)
tree8f76162b52f72f574c6c31bb8971b26b1c612036 /main
parent5aee798842115e21ee3b9e3f4e45a10bcf82ac98 (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.c13
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;
}