diff options
author | Pierre Habouzit <madcoder@debian.org> | 2007-09-20 10:43:11 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-09-20 23:17:22 -0700 |
commit | 19247e5510279f018f8358a72b38cc5aa62fac8a (patch) | |
tree | 6ee9736265daacbd734b103451f3608ef370d45b /imap-send.c | |
parent | e03e05ff73a6f6b4f32eb5cd13b4f1e43275e42f (diff) | |
download | git-19247e5510279f018f8358a72b38cc5aa62fac8a.tar.gz git-19247e5510279f018f8358a72b38cc5aa62fac8a.tar.xz |
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 <madcoder@debian.org>
Diffstat (limited to 'imap-send.c')
-rw-r--r-- | imap-send.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/imap-send.c b/imap-send.c index 905d09746..e95cdde06 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 ); |