diff --git a/mercurial/parsers.c b/mercurial/parsers.c --- a/mercurial/parsers.c +++ b/mercurial/parsers.c @@ -546,7 +546,7 @@ static inline int nt_level(const char *n 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; @@ -554,7 +554,9 @@ static int nt_find(indexObject *self, co 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]; @@ -596,7 +598,7 @@ static int nt_insert(indexObject *self, int level = 0; int off = 0; - while (level < 20) { + while (level < 40) { int k = nt_level(node, level); nodetree *n; int v;