diff options
author | Robert Newson <rnewson@apache.org> | 2020-07-09 20:41:19 +0100 |
---|---|---|
committer | Robert Newson <rnewson@apache.org> | 2020-07-09 20:41:19 +0100 |
commit | 387b7c122a1685c03b5a0868df5f81424c2e47a0 (patch) | |
tree | cc69d669521b1345718d4ea06d266db0ae392908 | |
parent | 2818bce6d9f55fd732cd6cf8d1d588de771e5fd5 (diff) | |
download | couchdb-387b7c122a1685c03b5a0868df5f81424c2e47a0.tar.gz |
assert that non-leafs have no prev/next pointers
-rw-r--r-- | src/ebtree.erl | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/ebtree.erl b/src/ebtree.erl index a2ad0224c..827d6fe5c 100644 --- a/src/ebtree.erl +++ b/src/ebtree.erl @@ -666,6 +666,7 @@ validate_tree(Tx, #tree{} = Tree, [{_F, _L, P, _R} | Rest]) -> validate_node(#tree{} = Tree, #node{} = Node) -> NumKeys = length(Node#node.members), + IsLeaf = Node#node.level =:= 0, IsRoot = ?NODE_ROOT_ID == Node#node.id, OutOfOrder = Node#node.members /= sort(Tree, Node#node.members), Duplicates = Node#node.members /= usort(Tree, Node#node.members), @@ -676,6 +677,10 @@ validate_node(#tree{} = Tree, #node{} = Node) -> erlang:error({too_few_keys, Node}); NumKeys > Tree#tree.max -> erlang:error({too_many_keys, Node}); + not IsLeaf andalso Node#node.prev /= undefined -> + erlang:error({non_leaf_with_prev, Node}); + not IsLeaf andalso Node#node.next /= undefined -> + erlang:error({non_leaf_with_next, Node}); OutOfOrder -> erlang:error({out_of_order, Node}); Duplicates -> |