##// END OF EJS Templates
parsers: use the correct maximum radix tree depth...
Bryan O'Sullivan -
r16641:e6dfbc5d stable
parent child Browse files
Show More
@@ -546,7 +546,7 b' static inline int nt_level(const char *n'
546
546
547 static int nt_find(indexObject *self, const char *node, Py_ssize_t nodelen)
547 static int nt_find(indexObject *self, const char *node, Py_ssize_t nodelen)
548 {
548 {
549 int level, off;
549 int level, maxlevel, off;
550
550
551 if (nodelen == 20 && node[0] == '\0' && memcmp(node, nullid, 20) == 0)
551 if (nodelen == 20 && node[0] == '\0' && memcmp(node, nullid, 20) == 0)
552 return -1;
552 return -1;
@@ -554,7 +554,9 b' static int nt_find(indexObject *self, co'
554 if (self->nt == NULL)
554 if (self->nt == NULL)
555 return -2;
555 return -2;
556
556
557 for (level = off = 0; level < nodelen; level++) {
557 maxlevel = nodelen > 20 ? 40 : ((int)nodelen * 2);
558
559 for (level = off = 0; level < maxlevel; level++) {
558 int k = nt_level(node, level);
560 int k = nt_level(node, level);
559 nodetree *n = &self->nt[off];
561 nodetree *n = &self->nt[off];
560 int v = n->children[k];
562 int v = n->children[k];
@@ -596,7 +598,7 b' static int nt_insert(indexObject *self, '
596 int level = 0;
598 int level = 0;
597 int off = 0;
599 int off = 0;
598
600
599 while (level < 20) {
601 while (level < 40) {
600 int k = nt_level(node, level);
602 int k = nt_level(node, level);
601 nodetree *n;
603 nodetree *n;
602 int v;
604 int v;
General Comments 0
You need to be logged in to leave comments. Login now