diff --git a/utils.c b/utils.c
index cc5bf3b223658664d0d4970084d578301bd7cc45..069eb65d6ef9ddd1062de7383d747480efa43b01 100755
--- a/utils.c
+++ b/utils.c
@@ -617,17 +617,17 @@ int vasprintf(char **strp, const char *fmt, va_list ap)
 {
 	int size;
 	va_list ap2;
+	char s;
 
 	*strp = NULL;
 	va_copy(ap2, ap);
-	size = vsnprintf(*strp, 0, fmt, ap2);
+	size = vsnprintf(&s, 1, fmt, ap2);
 	va_end(ap2);
 	*strp = malloc(size + 1);
 	if (!*strp)
 		return -1;
-	va_start(fmt, ap);
 	vsnprintf(*strp, size + 1, fmt, ap);
-	va_end(ap);
+	free(*strp);
 
 	return size;
 }