diff mercurial/revset.py @ 25996:b12e00a05d57 stable

revset: prevent crash caused by empty group expression while optimizing "or" An empty group expression "()" generates None in AST, so it should be tested before destructuring a tuple. "A | ()" is still evaluated to an error because I'm not sure whether "()" represents an empty set or an empty expression (= a unit value). They are identical in "or" operation, but they should be evaluated differently in "and" operation. expression empty set unit value ---------- --------- ---------- () {} A A & () {} A A | () A A
author Yuya Nishihara <yuya@tcha.org>
date Sun, 09 Aug 2015 16:09:41 +0900
parents 4f703dcc626f
children a7527c5769bb
line wrap: on
line diff
--- a/mercurial/revset.py	Sun Aug 09 16:06:36 2015 +0900
+++ b/mercurial/revset.py	Sun Aug 09 16:09:41 2015 +0900
@@ -2280,7 +2280,7 @@
             del ss[:]
         for y in x[1:]:
             w, t = optimize(y, False)
-            if t[0] == 'string' or t[0] == 'symbol':
+            if t is not None and (t[0] == 'string' or t[0] == 'symbol'):
                 ss.append((w, t))
                 continue
             flushss()