Daniel Veillard wrote:
> Subject: [PATCH] virBufferVSprintf: do not skip va_end
>
> * src/util/buf.c (virBufferVSprintf): Do not omit or skip va_end calls.
...
Hum, that one I'm not sure. In the case of virBufferGrow
failure,
we just did va_end(locarg); in the loop before, so going to cleanup
there does it twice, and I'm not sure it's legal. Probably simpler to
add just va_end(argptr); before return in that case and drop the
cleanup: target.
Good catch. Corrected, as you suggest:
From 313af81e8ff93ceb06b6086ea917db6a7eb160cc Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering(a)redhat.com>
Date: Thu, 18 Feb 2010 21:25:01 +0100
Subject: [PATCH] virBufferVSprintf: do not omit va_end call
* src/util/buf.c (virBufferVSprintf): Do not omit va_end call.
Improved-by: Daniel Veillard.
---
.gnulib | 2 +-
src/util/buf.c | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/.gnulib b/.gnulib
index 11fbc57..a1d565a 160000
--- a/.gnulib
+++ b/.gnulib
@@ -1 +1 @@
-Subproject commit 11fbc57405a118e6ec9a3ebc19bbf5ececdae4d6
+Subproject commit a1d565aa5b47ec56243e74d4ac8b4988a751fef2
diff --git a/src/util/buf.c b/src/util/buf.c
index cc0a087..ef72294 100644
--- a/src/util/buf.c
+++ b/src/util/buf.c
@@ -245,8 +245,10 @@ virBufferVSprintf(const virBufferPtr buf, const char *format, ...)
va_end(locarg);
grow_size = (count > 1000) ? count : 1000;
- if (virBufferGrow(buf, grow_size) < 0)
+ if (virBufferGrow(buf, grow_size) < 0) {
+ va_end(argptr);
return;
+ }
size = buf->size - buf->use - 1;
va_copy(locarg, argptr);
--
1.7.0.233.g05e1a