diff options
Diffstat (limited to 'src/couch/src/couch_doc.erl')
-rw-r--r-- | src/couch/src/couch_doc.erl | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl index e5ad9e9f1..2a2b4db68 100644 --- a/src/couch/src/couch_doc.erl +++ b/src/couch/src/couch_doc.erl @@ -275,9 +275,16 @@ transfer_fields([{<<"_revisions">>, {Props}} | Rest], Doc, DbName) -> true -> ok end, - [throw({doc_validation, "RevId isn't a string"}) || - RevId <- RevIds, not is_binary(RevId)], - RevIds2 = [parse_revid(RevId) || RevId <- RevIds], + RevIds2 = lists:map(fun(RevId) -> + try + parse_revid(RevId) + catch + error:function_clause -> + throw({doc_validation, "RevId isn't a string"}); + error:badarg -> + throw({doc_validation, "RevId isn't a valid hexadecimal"}) + end + end, RevIds), transfer_fields(Rest, Doc#doc{revs={Start, RevIds2}}, DbName); transfer_fields([{<<"_deleted">>, B} | Rest], Doc, DbName) when is_boolean(B) -> |