Merge branch 'maint-1.6.1' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 28 Apr 2009 07:46:25 +0000 (00:46 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 Apr 2009 07:46:25 +0000 (00:46 -0700)
* maint-1.6.1:
  grep: fix segfault when "git grep '('" is given
  Documentation: fix a grammatical error in api-builtin.txt
  builtin-merge: fix a typo in an error message

Documentation/technical/api-builtin.txt
builtin-merge.c
grep.c
t/t7002-grep.sh

index 7ede1e6..5cb2b05 100644 (file)
@@ -37,7 +37,7 @@ where options is the bitwise-or of:
 
        Make sure there is a work tree, i.e. the command cannot act
        on bare repositories.
-       This makes only sense when `RUN_SETUP` is also set.
+       This only makes sense when `RUN_SETUP` is also set.
 
 . Add `builtin-foo.o` to `BUILTIN_OBJS` in `Makefile`.
 
index 6d2160d..c339380 100644 (file)
@@ -765,7 +765,7 @@ static int suggest_conflicts(void)
 
        fp = fopen(git_path("MERGE_MSG"), "a");
        if (!fp)
-               die("Could open %s for writing", git_path("MERGE_MSG"));
+               die("Could not open %s for writing", git_path("MERGE_MSG"));
        fprintf(fp, "\nConflicts:\n");
        for (pos = 0; pos < active_nr; pos++) {
                struct cache_entry *ce = active_cache[pos];
diff --git a/grep.c b/grep.c
index 062b2b6..b0d992a 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -70,6 +70,8 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
        struct grep_expr *x;
 
        p = *list;
+       if (!p)
+               return NULL;
        switch (p->token) {
        case GREP_PATTERN: /* atom */
        case GREP_PATTERN_HEAD:
@@ -82,8 +84,6 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
        case GREP_OPEN_PAREN:
                *list = p->next;
                x = compile_pattern_or(list);
-               if (!x)
-                       return NULL;
                if (!*list || (*list)->token != GREP_CLOSE_PAREN)
                        die("unmatched parenthesis");
                *list = (*list)->next;
@@ -99,6 +99,8 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list)
        struct grep_expr *x;
 
        p = *list;
+       if (!p)
+               return NULL;
        switch (p->token) {
        case GREP_NOT:
                if (!p->next)
@@ -386,6 +388,8 @@ static int match_expr_eval(struct grep_opt *o,
 {
        int h = 0;
 
+       if (!x)
+               die("Not a valid grep expression");
        switch (x->node) {
        case GREP_NODE_ATOM:
                h = match_one_pattern(o, x->u.atom, bol, eol, ctx);
index c493854..b815937 100755 (executable)
@@ -26,6 +26,10 @@ test_expect_success setup '
        git commit -m initial
 '
 
+test_expect_success 'grep should not segfault with a bad input' '
+       test_must_fail git grep "("
+'
+
 for H in HEAD ''
 do
        case "$H" in