summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--share/www/script/test/attachments.js7
-rw-r--r--src/couchdb/couch_httpd_db.erl1
2 files changed, 8 insertions, 0 deletions
diff --git a/share/www/script/test/attachments.js b/share/www/script/test/attachments.js
index 1ed81ad8..36f5a5ad 100644
--- a/share/www/script/test/attachments.js
+++ b/share/www/script/test/attachments.js
@@ -237,4 +237,11 @@ couchTests.attachments= function(debug) {
headers:{"Content-Type":"text/plain;charset=utf-8"}
});
TEquals(201, xhr.status, "should send 201 Accepted");
+
+ // implicit doc creation allows creating docs with a reserved id. COUCHDB-565
+ var xhr = CouchDB.request("PUT", "/test_suite_db/_nonexistant/attachment.txt", {
+ headers: {"Content-Type":"text/plain;charset=utf-8"},
+ body: "THIS IS AN ATTACHMENT. BOOYA!"
+ });
+ TEquals(400, xhr.status, "should return error code 400 Bad Request");
};
diff --git a/src/couchdb/couch_httpd_db.erl b/src/couchdb/couch_httpd_db.erl
index 88c51cf7..da62ccb4 100644
--- a/src/couchdb/couch_httpd_db.erl
+++ b/src/couchdb/couch_httpd_db.erl
@@ -958,6 +958,7 @@ db_attachment_req(#httpd{method=Method}=Req, Db, DocId, FileNameParts)
Doc = case extract_header_rev(Req, couch_httpd:qs_value(Req, "rev")) of
missing_rev -> % make the new doc
+ couch_doc:validate_docid(DocId),
#doc{id=DocId};
Rev ->
case couch_db:open_doc_revs(Db, DocId, [Rev], []) of