diff -r 1435866c1937 -r 5cf18921bb7b mercurial/parsers.c --- a/mercurial/parsers.c Wed May 09 09:58:50 2012 +0200 +++ b/mercurial/parsers.c Sat May 12 00:06:11 2012 +0200 @@ -555,7 +555,7 @@ */ static int nt_find(indexObject *self, const char *node, Py_ssize_t nodelen) { - int level, off; + int level, maxlevel, off; if (nodelen == 20 && node[0] == '\0' && memcmp(node, nullid, 20) == 0) return -1; @@ -563,7 +563,9 @@ if (self->nt == NULL) return -2; - for (level = off = 0; level < nodelen; level++) { + maxlevel = nodelen > 20 ? 40 : ((int)nodelen * 2); + + for (level = off = 0; level < maxlevel; level++) { int k = nt_level(node, level); nodetree *n = &self->nt[off]; int v = n->children[k]; @@ -606,7 +608,7 @@ int level = 0; int off = 0; - while (level < 20) { + while (level < 40) { int k = nt_level(node, level); nodetree *n; int v;