Commit 4a9ea530 authored by Mukund Sivaraman's avatar Mukund Sivaraman
Browse files

[2504] Fix getClosestNSEC() when tree.find() results in SUBDOMAIN

When tree.find() results in SUBDOMAIN, the node_path's top contains the
previous node.  Calling previousNode() yet again will return its
further previous node.
parent cbf6d380
......@@ -305,8 +305,16 @@ getClosestNSEC(const ZoneData& zone_data,
}
const ZoneNode* prev_node;
while ((prev_node = zone_data.getZoneTree().previousNode(node_path))
!= NULL) {
if (node_path.getLastComparisonResult().getRelation() ==
NameComparisonResult::SUBDOMAIN) {
// In case the search ended as a sub-domain, the previous node
// is already at the top of node_path.
prev_node = node_path.getLastComparedNode();
} else {
prev_node = zone_data.getZoneTree().previousNode(node_path);
}
while (prev_node != NULL) {
if (!prev_node->isEmpty()) {
const RdataSet* found =
RdataSet::find(prev_node->getData(), RRType::NSEC());
......@@ -314,6 +322,7 @@ getClosestNSEC(const ZoneData& zone_data,
return (ConstNodeRRset(prev_node, found));
}
}
prev_node = zone_data.getZoneTree().previousNode(node_path);
}
// This must be impossible and should be an internal bug.
// See the description at the method declaration.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment