This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch user-partitioned-dbs-4 in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 6d5ce6ae85373d316c3d1cf11054afbd4c7a7b5c Author: Robert Newson <[email protected]> AuthorDate: Thu Aug 2 14:41:03 2018 +0100 Enforce partition:id format in doc ids --- src/couch/src/couch_doc.erl | 26 ++++++++++++++++++++++---- src/couch/test/fixtures/test.couch | Bin 16482 -> 0 bytes 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl index f960ec5..9caa5ee 100644 --- a/src/couch/src/couch_doc.erl +++ b/src/couch/src/couch_doc.erl @@ -133,6 +133,12 @@ from_json_obj_validate(EJson) -> from_json_obj_validate(EJson, DbName) -> MaxSize = config:get_integer("couchdb", "max_document_size", 4294967296), Doc = from_json_obj(EJson, DbName), + case is_binary(DbName) andalso mem3:is_partitioned(DbName) of + true -> + couch_doc:validate_docid(Doc#doc.id, DbName); + false -> + ok + end, case couch_ejson_size:encoded_size(Doc#doc.body) =< MaxSize of true -> validate_attachment_sizes(Doc#doc.atts), @@ -199,11 +205,23 @@ parse_revs(_) -> validate_docid(DocId, DbName) -> - case DbName =:= ?l2b(config:get("mem3", "shards_db", "_dbs")) andalso - lists:member(DocId, ?SYSTEM_DATABASES) of - true -> + SystemId = DbName =:= ?l2b(config:get("mem3", "shards_db", "_dbs")) andalso + lists:member(DocId, ?SYSTEM_DATABASES), + Partitioned = is_binary(DbName) andalso mem3:is_partitioned(DbName), + case {SystemId, Partitioned} of + {true, _} -> ok; - false -> + {false, true} -> + case binary:split(DocId, <<":">>) of + [<<"_design/", _/binary>> | _Rest] -> + validate_docid(DocId); + [Partition, Rest] -> + ok = validate_docid(Partition), + validate_docid(Rest); + _ -> + throw({illegal_docid, <<"doc id must be of form partition:id">>}) + end; + {false, false} -> validate_docid(DocId) end. diff --git a/src/couch/test/fixtures/test.couch b/src/couch/test/fixtures/test.couch deleted file mode 100644 index 32c79af..0000000 Binary files a/src/couch/test/fixtures/test.couch and /dev/null differ
