# HG changeset patch # User sorcerer # Date 2012-08-02 15:10:45 # Node ID bde1185f406cd2367e3973d827a6d613fd68ec60 # Parent 9d9d15928521488f3721859823c445356a103b06 revlog: don't try to partialmatch strings those length > 40 _partialmatch() does prefix matching against nodes. String passed to _partialmetch() actualy may be any string, not prefix only. For example, "e410be8603932e46a51298748a4b874739037fad or 300" is a good argument for _partialmatch(). When _partialmatch() searches using radix tree, index_partialmatch() C function shouldn't try to match too long strings. diff --git a/mercurial/parsers.c b/mercurial/parsers.c --- a/mercurial/parsers.c +++ b/mercurial/parsers.c @@ -1084,8 +1084,10 @@ static PyObject *index_partialmatch(inde return NULL; } - if (nodelen > 40) - nodelen = 40; + if (nodelen > 40) { + PyErr_SetString(PyExc_ValueError, "key too long"); + return NULL; + } for (i = 0; i < nodelen; i++) hexdigit(node, i);