[PATCH] revlog: add explicit type check to _match()

Dan Villiom Podlaski Christiansen danchr at gmail.com
Wed Aug 12 05:13:31 CDT 2009

# HG changeset patch
# User Dan Villiom Podlaski Christiansen <danchr at gmail.com>
# Date 1250071313 -7200
# Node ID 503f9a6eacfa9afd12493d5cbf1707c3d2046504
# Parent  a4a996cce137e1a328f6cd384d46b97e62fd26fe
revlog: add explicit type check to _match().

The _match method called len() on its parameter without checking the
type, raising a TypeError if 'None' was given. This change adds a type
check, and in case of failure raises the usual 'LookupError'.

I ran into this when loading the 'pathrevspec' extension before
'share'. For some reason, this caused the 'None' value of 'checkout'
in hg.share() to be propagated down the call chain.

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -845,7 +845,12 @@ class revlog(object):
         if isinstance(id, (long, int)):
             # rev
             return self.node(id)
-        if len(id) == 20:
+        elif not isinstance(id, basestring):
+            # invalid identifier: len() or int() may not allow this,
+            # so raise an explicit LookupError.
+            raise LookupError(id, self.indexfile,
+                              _('invalid identifier'))
+        elif len(id) == 20:
             # possibly a binary node
             # odds of a binary node being all hex in ASCII are 1 in 10**25

More information about the Mercurial-devel mailing list