path: root/imap-send.c
diff options
authorPierre Habouzit <>2007-09-20 08:43:11 (GMT)
committerJunio C Hamano <>2007-09-21 06:17:22 (GMT)
commit19247e5510279f018f8358a72b38cc5aa62fac8a (patch)
tree6ee9736265daacbd734b103451f3608ef370d45b /imap-send.c
parente03e05ff73a6f6b4f32eb5cd13b4f1e43275e42f (diff)
nfv?asprintf are broken without va_copy, workaround them.
* drop nfasprintf. * move nfvasprintf into imap-send.c back, and let it work on a 8k buffer, and die() in case of overflow. It should be enough for imap commands, if someone cares about imap-send, he's welcomed to fix it properly. * replace nfvasprintf use in merge-recursive with a copy of the strbuf_addf logic, it's one place, we'll live with it. To ease the change, output_buffer string list is replaced with a strbuf ;) * rework trace.c to call vsnprintf itself. It's used to format strerror()s and git command names, it should never be more than a few octets long, let it work on a 8k static buffer with vsnprintf or die loudly. Signed-off-by: Pierre Habouzit <>
Diffstat (limited to 'imap-send.c')
1 files changed, 13 insertions, 0 deletions
diff --git a/imap-send.c b/imap-send.c
index 905d097..e95cdde 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -105,6 +105,19 @@ static void free_generic_messages( message_t * );
static int nfsnprintf( char *buf, int blen, const char *fmt, ... );
+static int nfvasprintf(char **strp, const char *fmt, va_list ap)
+ int len;
+ char tmp[8192];
+ len = vsnprintf(tmp, sizeof(tmp), fmt, ap);
+ if (len < 0)
+ die("Fatal: Out of memory\n");
+ if (len >= sizeof(tmp))
+ die("imap command overflow !\n");
+ *strp = xmemdupz(tmp, len);
+ return len;
static void arc4_init( void );
static unsigned char arc4_getbyte( void );