Browse Source

grep -An -Bm: fix invocation of external grep command

When building command line to invoke external grep, the
arguments to -A/-B/-C options were placd in randarg[] buffer,
but the code forgot that snprintf() does not count terminating
NUL in its return value.  This caused "git grep -A1 -B2" to
invoke external grep with "-B21 -A1".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 17 years ago
parent
commit
4b87474bc9
  1. 6
      builtin-grep.c

6
builtin-grep.c

@ -294,7 +294,7 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached)
if (opt->pre_context) { if (opt->pre_context) {
push_arg("-B"); push_arg("-B");
len += snprintf(argptr, sizeof(randarg)-len, len += snprintf(argptr, sizeof(randarg)-len,
"%u", opt->pre_context); "%u", opt->pre_context) + 1;
if (sizeof(randarg) <= len) if (sizeof(randarg) <= len)
die("maximum length of args exceeded"); die("maximum length of args exceeded");
push_arg(argptr); push_arg(argptr);
@ -303,7 +303,7 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached)
if (opt->post_context) { if (opt->post_context) {
push_arg("-A"); push_arg("-A");
len += snprintf(argptr, sizeof(randarg)-len, len += snprintf(argptr, sizeof(randarg)-len,
"%u", opt->post_context); "%u", opt->post_context) + 1;
if (sizeof(randarg) <= len) if (sizeof(randarg) <= len)
die("maximum length of args exceeded"); die("maximum length of args exceeded");
push_arg(argptr); push_arg(argptr);
@ -313,7 +313,7 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached)
else { else {
push_arg("-C"); push_arg("-C");
len += snprintf(argptr, sizeof(randarg)-len, len += snprintf(argptr, sizeof(randarg)-len,
"%u", opt->post_context); "%u", opt->post_context) + 1;
if (sizeof(randarg) <= len) if (sizeof(randarg) <= len)
die("maximum length of args exceeded"); die("maximum length of args exceeded");
push_arg(argptr); push_arg(argptr);

Loading…
Cancel
Save