You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2020/08/04 20:29:40 UTC

[couchdb] branch prototype/fdb-layer-ebtree-collate-validate created (now 44564eb)

This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a change to branch prototype/fdb-layer-ebtree-collate-validate
in repository https://gitbox.apache.org/repos/asf/couchdb.git.


      at 44564eb  Validate the result from collate_fun

This branch includes the following new commits:

     new 44564eb  Validate the result from collate_fun

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: Validate the result from collate_fun

Posted by rn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch prototype/fdb-layer-ebtree-collate-validate
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 44564eb7ef9ba2051c96520d8180d39fb35f2e1d
Author: Robert Newson <rn...@apache.org>
AuthorDate: Tue Aug 4 21:28:58 2020 +0100

    Validate the result from collate_fun
---
 src/ebtree/src/ebtree.erl | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl
index bae0ff3..36d3c47 100644
--- a/src/ebtree/src/ebtree.erl
+++ b/src/ebtree/src/ebtree.erl
@@ -918,7 +918,13 @@ collate(#tree{} = _Tree, _A, ?MAX) ->
 
 collate(#tree{} = Tree, A, B) ->
     #tree{collate_fun = CollateFun} = Tree,
-    CollateFun(A, B).
+    Result = CollateFun(A, B),
+    case lists:member(Result, [lt, eq, gt]) of
+        true ->
+            Result;
+        false ->
+            throw(invalid_collation_result)
+    end.
 
 
 collate(#tree{} = Tree, A, B, Allowed) ->
@@ -1090,6 +1096,11 @@ collation_fun_test_() ->
     ].
 
 
+collate_validation_test() ->
+    Tree = #tree{collate_fun = fun(_A, _B) -> foo end},
+    ?assertThrow(invalid_collation_result, collate(Tree, 1, 2)).
+
+
 lookup_test() ->
     Db = erlfdb_util:get_test_db([empty]),
     Tree = open(Db, <<1,2,3>>, 4),