Mercurial > hg
diff mercurial/revset.py @ 25995:4f703dcc626f stable
revset: prevent crash caused by empty group expression while optimizing "and"
An empty group expression "()" generates None in AST, so the optimizer have
to test it before destructuring a tuple. The error message, "missing argument",
is somewhat obscure, but it should be better than crash.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 09 Aug 2015 16:06:36 +0900 |
parents | be29d26e2949 |
children | b12e00a05d57 |
line wrap: on
line diff
--- a/mercurial/revset.py Sat Aug 08 14:42:27 2015 +0800 +++ b/mercurial/revset.py Sun Aug 09 16:06:36 2015 +0900 @@ -2245,8 +2245,10 @@ # (::x and not ::y)/(not ::y and ::x) have a fast path def isonly(revs, bases): return ( - revs[0] == 'func' + revs is not None + and revs[0] == 'func' and getstring(revs[1], _('not a symbol')) == 'ancestors' + and bases is not None and bases[0] == 'not' and bases[1][0] == 'func' and getstring(bases[1][1], _('not a symbol')) == 'ancestors')