diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-07-13 16:52:53 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-07-13 16:52:53 -0700 |
commit | 1157618a2ae50ae611ca22ce1833760bc0456156 (patch) | |
tree | 7e0a1cbd4401c16d93a82981a385726655cc052c | |
parent | Merge branch 'bk/doc-commit-typofix' (diff) | |
parent | grep: report missing left operand of --and (diff) | |
download | tgif-1157618a2ae50ae611ca22ce1833760bc0456156.tar.xz |
Merge branch 'rs/grep-parser-fix'
"git grep --and -e foo" ought to have been diagnosed as an error
but instead segfaulted, which has been corrected.
* rs/grep-parser-fix:
grep: report missing left operand of --and
-rw-r--r-- | grep.c | 2 | ||||
-rwxr-xr-x | t/t7810-grep.sh | 9 |
2 files changed, 11 insertions, 0 deletions
@@ -657,6 +657,8 @@ static struct grep_expr *compile_pattern_and(struct grep_pat **list) x = compile_pattern_not(list); p = *list; if (p && p->token == GREP_AND) { + if (!x) + die("--and not preceded by pattern expression"); if (!p->next) die("--and not followed by pattern expression"); *list = p->next; diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh index 5830733f3d..6b6423a07c 100755 --- a/t/t7810-grep.sh +++ b/t/t7810-grep.sh @@ -11,6 +11,13 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME . ./test-lib.sh +test_invalid_grep_expression() { + params="$@" && + test_expect_success "invalid expression: grep $params" ' + test_must_fail git grep $params -- nonexisting + ' +} + cat >hello.c <<EOF #include <assert.h> #include <stdio.h> @@ -89,6 +96,8 @@ test_expect_success 'grep should not segfault with a bad input' ' test_must_fail git grep "(" ' +test_invalid_grep_expression --and -e A + for H in HEAD '' do case "$H" in |