# HG changeset patch # User sorcerer # Date 1343920245 -14400 # 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 -r 9d9d15928521 -r bde1185f406c mercurial/parsers.c --- a/mercurial/parsers.c Sat Aug 11 12:45:37 2012 -0500 +++ b/mercurial/parsers.c Thu Aug 02 19:10:45 2012 +0400 @@ -1084,8 +1084,10 @@ 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);