Closed GoogleCodeExporter closed 9 years ago
I have implemented a fix. The fix is in
ConcurrentInvertedRadixTree.ConcurrentInvertedRadixTreeImpl.scanForKeysAtStartOf
Input.
Here's a code snippet of the method with the fix wrapped in comments. Look for
// beth tirado
for the fix
protected KeyValuePair<O> computeNext() {
outer_loop: while (charsMatched < documentLength) {
Node nextNode = currentNode.getOutgoingEdge(input.charAt(charsMatched));
if (nextNode == null) {
// Next node is a dead end...
//noinspection UnnecessaryLabelOnBreakStatement
break outer_loop;
}
currentNode = nextNode;
CharSequence currentNodeEdgeCharacters = currentNode.getIncomingEdge();
// beth tirado: Submitted bug http://code.google.com/p/concurrent-trees/issues/detail?id=6
// this is the fix.
if (currentNodeEdgeCharacters.length() + charsMatched > documentLength) {
// this node can't be a match becasue it is too long
return endOfData();
}
// beth tirado: end fix
int charsMatchedThisEdge = 0;
for (int i = 0, j = Math.min(currentNodeEdgeCharacters.length(), documentLength - charsMatched); i < j; i++) {
if (currentNodeEdgeCharacters.charAt(i) != input.charAt(charsMatched + i)) {
// Found a difference in chars between character in key and a character in current node.
// Current node is the deepest match (inexact match)....
break outer_loop;
}
charsMatchedThisEdge++;
}
if (charsMatchedThisEdge == currentNodeEdgeCharacters.length()) {
// All characters in the current edge matched, add this number to total chars matched...
charsMatched += charsMatchedThisEdge;
if (currentNode.getValue() != null) {
return new KeyValuePairImpl<O>(CharSequences.toString(input.subSequence(0, charsMatched)), currentNode.getValue());
}
}
}
return endOfData();
}
};
Original comment by bethtir...@gmail.com
on 7 Oct 2013 at 1:33
Hi Beth, yes you are correct, this was a bug.
Thanks for identifying this and especially for supplying a patch. I have
applied your patch, which fixes it.
I've released it as concurrent-trees 2.1.1, it should sync to Maven central in
a few hours.
Original comment by ni...@npgall.com
on 7 Oct 2013 at 9:03
Original issue reported on code.google.com by
bethtir...@gmail.com
on 5 Oct 2013 at 7:29Attachments: