diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-08-19 02:50:18 -0700 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-08-19 13:11:01 -0400 |
commit | 7e5dcea8311472156ed0fea164e689777353f931 (patch) | |
tree | 3310c05585f207c77bb377e9d190a826cbba9809 | |
parent | Include recent command history in fast-import crash reports (diff) | |
download | tgif-7e5dcea8311472156ed0fea164e689777353f931.tar.xz |
fast-import pull request
* skip_optional_lf() decl is old-style -- please say
static skip_optional_lf(void)
{
...
}
* t9300 #14 fails, like this:
* expecting failure: git-fast-import <input
fatal: Branch name doesn't conform to GIT standards: .badbranchname
fast-import: dumping crash report to .git/fast_import_crash_14354
./test-lib.sh: line 143: 14354 Segmentation fault git-fast-import <input
-- >8 --
Subject: [PATCH] fastimport: Fix re-use of va_list
The va_list is designed to be used only once. The current code
reuses va_list argument may cause segmentation fault. Copy and
release the arguments to avoid this problem.
While we are at it, fix old-style function declaration of
skip_optional_lf().
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r-- | fast-import.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fast-import.c b/fast-import.c index 5085fbf116..2d5224c186 100644 --- a/fast-import.c +++ b/fast-import.c @@ -442,16 +442,18 @@ static void write_crash_report(const char *err, va_list params) static NORETURN void die_nicely(const char *err, va_list params) { static int zombie; + va_list x_params; + va_copy(x_params, params); fputs("fatal: ", stderr); vfprintf(stderr, err, params); fputc('\n', stderr); if (!zombie) { zombie = 1; - write_crash_report(err, params); + write_crash_report(err, x_params); } - + va_end(x_params); exit(128); } @@ -1618,7 +1620,7 @@ static void read_next_command(void) } while (command_buf.buf[0] == '#'); } -static void skip_optional_lf() +static void skip_optional_lf(void) { int term_char = fgetc(stdin); if (term_char != '\n' && term_char != EOF) |