summaryrefslogtreecommitdiff
path: root/src/couch/src/couch_doc.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/couch/src/couch_doc.erl')
-rw-r--r--src/couch/src/couch_doc.erl13
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) ->