* git grep '(' = segfault
@ 2009-04-27 17:46 Dmitry Potapov
2009-04-27 18:10 ` Linus Torvalds
2009-04-27 18:15 ` Michał Kiedrowicz
0 siblings, 2 replies; 9+ messages in thread
From: Dmitry Potapov @ 2009-04-27 17:46 UTC (permalink / raw)
To: Git Mailing List
Hi,
I have tried a few version of Git and got "Segmentation fault" when
run:
$ git grep '('
I am not very familiar with grep code and don't have time to dig
into it right now. So, maybe someone else can take a look at it.
Thanks,
Dmitry
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: git grep '(' = segfault 2009-04-27 17:46 git grep '(' = segfault Dmitry Potapov @ 2009-04-27 18:10 ` Linus Torvalds 2009-04-27 18:42 ` Erik Faye-Lund 2009-04-27 18:15 ` Michał Kiedrowicz 1 sibling, 1 reply; 9+ messages in thread From: Linus Torvalds @ 2009-04-27 18:10 UTC (permalink / raw) To: Dmitry Potapov; +Cc: Git Mailing List On Mon, 27 Apr 2009, Dmitry Potapov wrote: > > I have tried a few version of Git and got "Segmentation fault" when > run: > > $ git grep '(' > > I am not very familiar with grep code and don't have time to dig > into it right now. So, maybe someone else can take a look at it. Good job. Something like this should fix it. Linus --- grep.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/grep.c b/grep.c index f3a27d7..04c777a 100644 --- a/grep.c +++ b/grep.c @@ -72,6 +72,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: @@ -84,8 +86,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; @@ -101,6 +101,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) @@ -372,6 +374,8 @@ static int match_expr_eval(struct grep_expr *x, char *bol, char *eol, int h = 0; regmatch_t match; + if (!x) + die("Not a valid grep expression"); switch (x->node) { case GREP_NODE_ATOM: h = match_one_pattern(x->u.atom, bol, eol, ctx, &match, 0); ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: git grep '(' = segfault 2009-04-27 18:10 ` Linus Torvalds @ 2009-04-27 18:42 ` Erik Faye-Lund 2009-04-27 18:50 ` Linus Torvalds 2009-04-27 18:54 ` Matthieu Moy 0 siblings, 2 replies; 9+ messages in thread From: Erik Faye-Lund @ 2009-04-27 18:42 UTC (permalink / raw) To: Linus Torvalds; +Cc: Dmitry Potapov, Git Mailing List On Mon, Apr 27, 2009 at 8:10 PM, Linus Torvalds <torvalds@linux-foundation.org> wrote: > Something like this should fix it. > > Linus (Sorry that you're getting this mail twice, Linus - I forgot to reply all) This does indeed fix the crash, but I find the resulting operation quite bizarre. I'm getting a "fatal: unmatched paranthesis", however "git grep '(('" is happy to simply grep for the double parenthesis. Now, if I had done "git grep '\('", I'd expect an unmatched parenthesis-error... Am I misunderstanding something here? $ git grep '(' fatal: unmatched parenthesis $ git grep '((' Documentation/CodingGuidelines: - We use Arithmetic Expansion $(( ... )). [...] $ git grep '\(' fatal: command line, '\(': Unmatched ( or \( -- Erik "kusma" Faye-Lund kusmabite@gmail.com (+47) 986 59 656 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: git grep '(' = segfault 2009-04-27 18:42 ` Erik Faye-Lund @ 2009-04-27 18:50 ` Linus Torvalds 2009-04-27 18:53 ` Erik Faye-Lund 2009-04-27 18:54 ` Matthieu Moy 1 sibling, 1 reply; 9+ messages in thread From: Linus Torvalds @ 2009-04-27 18:50 UTC (permalink / raw) To: Erik Faye-Lund; +Cc: Dmitry Potapov, Git Mailing List On Mon, 27 Apr 2009, Erik Faye-Lund wrote: > On Mon, Apr 27, 2009 at 8:10 PM, Linus Torvalds > <torvalds@linux-foundation.org> wrote: > > Something like this should fix it. > > > > Linus > > (Sorry that you're getting this mail twice, Linus - I forgot to reply all) Payback time. Now _you'll_ get it twice. Mmmwwhahahahaahaaa! > $ git grep '(' > fatal: unmatched parenthesis Try this: git grep -e '(' because 'git grep' actually allows multiple patterns, so you can do things like git grep '(' -e hello --or -e 'hi there' ')' --and -e world Practical? Maybe. Linus ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: git grep '(' = segfault 2009-04-27 18:50 ` Linus Torvalds @ 2009-04-27 18:53 ` Erik Faye-Lund 0 siblings, 0 replies; 9+ messages in thread From: Erik Faye-Lund @ 2009-04-27 18:53 UTC (permalink / raw) To: Linus Torvalds; +Cc: Dmitry Potapov, Git Mailing List > Practical? Maybe. Confusing? Yes. ;) -- Erik "kusma" Faye-Lund kusmabite@gmail.com (+47) 986 59 656 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: git grep '(' = segfault 2009-04-27 18:42 ` Erik Faye-Lund 2009-04-27 18:50 ` Linus Torvalds @ 2009-04-27 18:54 ` Matthieu Moy 2009-04-27 19:02 ` Erik Faye-Lund 1 sibling, 1 reply; 9+ messages in thread From: Matthieu Moy @ 2009-04-27 18:54 UTC (permalink / raw) To: Erik Faye-Lund; +Cc: Linus Torvalds, Dmitry Potapov, Git Mailing List Erik Faye-Lund <kusmabite@googlemail.com> writes: > $ git grep '(' > fatal: unmatched parenthesis try this: git grep -e '(' The idea is that you can do things like git grep -e foo --and '(' -e bar --or -e boz ')' to build a boolean expression of expressions. -- Matthieu ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: git grep '(' = segfault 2009-04-27 18:54 ` Matthieu Moy @ 2009-04-27 19:02 ` Erik Faye-Lund 2009-04-27 23:18 ` Junio C Hamano 0 siblings, 1 reply; 9+ messages in thread From: Erik Faye-Lund @ 2009-04-27 19:02 UTC (permalink / raw) To: Matthieu Moy; +Cc: Linus Torvalds, Dmitry Potapov, Git Mailing List Yeah, thanks for explaining. But isn't this functionality kind of redundant since we have the -E switch? As far as I can see, "git grep -E "(bar|boz)" should do the same thing as "git grep -e foo --and '(' -e bar --or -e boz ')'"... On Mon, Apr 27, 2009 at 8:54 PM, Matthieu Moy <Matthieu.Moy@imag.fr> wrote: > Erik Faye-Lund <kusmabite@googlemail.com> writes: > >> $ git grep '(' >> fatal: unmatched parenthesis > > try this: git grep -e '(' > > The idea is that you can do things like > > git grep -e foo --and '(' -e bar --or -e boz ')' > > to build a boolean expression of expressions. > > -- > Matthieu > -- Erik "kusma" Faye-Lund kusmabite@gmail.com (+47) 986 59 656 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: git grep '(' = segfault 2009-04-27 19:02 ` Erik Faye-Lund @ 2009-04-27 23:18 ` Junio C Hamano 0 siblings, 0 replies; 9+ messages in thread From: Junio C Hamano @ 2009-04-27 23:18 UTC (permalink / raw) To: Erik Faye-Lund Cc: Matthieu Moy, Linus Torvalds, Dmitry Potapov, Git Mailing List Erik Faye-Lund <kusmabite@googlemail.com> writes: > Yeah, thanks for explaining. But isn't this functionality kind of > redundant since we have the -E switch? > As far as I can see, "git grep -E "(bar|boz)" should do the same thing > as "git grep -e foo --and '(' -e bar --or -e boz ')'"... With -E, --or is not strictly necessary. With only -E, however, it is cumbersome to express what --and can. Once you learn the handiness of --and, naturally you would start wanting to be able to say --or (especially if you do not even know about -E). ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: git grep '(' = segfault 2009-04-27 17:46 git grep '(' = segfault Dmitry Potapov 2009-04-27 18:10 ` Linus Torvalds @ 2009-04-27 18:15 ` Michał Kiedrowicz 1 sibling, 0 replies; 9+ messages in thread From: Michał Kiedrowicz @ 2009-04-27 18:15 UTC (permalink / raw) To: Dmitry Potapov; +Cc: Git Mailing List Dmitry Potapov <dpotapov@gmail.com> wrote: > Hi, > > I have tried a few version of Git and got "Segmentation fault" when > run: > > $ git grep '(' > > I am not very familiar with grep code and don't have time to dig > into it right now. So, maybe someone else can take a look at it. > > Thanks, > Dmitry > -- Try this patch, however I'm not sure if it is correct. --- diff --git a/grep.c b/grep.c index f3a27d7..5748355 100644 --- a/grep.c +++ b/grep.c @@ -84,10 +84,10 @@ 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"); + if (!x) + return NULL; *list = (*list)->next; return x; default: ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-04-27 23:18 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-27 17:46 git grep '(' = segfault Dmitry Potapov
2009-04-27 18:10 ` Linus Torvalds
2009-04-27 18:42 ` Erik Faye-Lund
2009-04-27 18:50 ` Linus Torvalds
2009-04-27 18:53 ` Erik Faye-Lund
2009-04-27 18:54 ` Matthieu Moy
2009-04-27 19:02 ` Erik Faye-Lund
2009-04-27 23:18 ` Junio C Hamano
2009-04-27 18:15 ` Michał Kiedrowicz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).