summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuanjo Rodriguez <juanjo@apache.org>2020-09-24 07:45:05 +0200
committerJuanjo Rodriguez <jjrodrig@gmail.com>2020-10-01 22:30:13 +0200
commita3ba88c897bba601dcab7d82999783a8c123c7fa (patch)
treebe490519248aca33830645965ebb00147bac0644
parent7bc5d4eda9550195b3d82ca9cddb56e6729de093 (diff)
downloadcouchdb-a3ba88c897bba601dcab7d82999783a8c123c7fa.tar.gz
Preserve query string rewrite when the request contains a body
-rw-r--r--src/chttpd/src/chttpd_rewrite.erl3
-rw-r--r--test/javascript/tests/rewrite_js.js16
2 files changed, 18 insertions, 1 deletions
diff --git a/src/chttpd/src/chttpd_rewrite.erl b/src/chttpd/src/chttpd_rewrite.erl
index 019651374..1c2c1f333 100644
--- a/src/chttpd/src/chttpd_rewrite.erl
+++ b/src/chttpd/src/chttpd_rewrite.erl
@@ -71,8 +71,9 @@ do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) when is_list(Props)
undefined -> erlang:get(mochiweb_request_body);
B -> B
end,
+ NewMochiReq:cleanup(),
case Body of
- undefined -> NewMochiReq:cleanup();
+ undefined -> [];
_ -> erlang:put(mochiweb_request_body, Body)
end,
couch_log:debug("rewrite to ~p", [Path]),
diff --git a/test/javascript/tests/rewrite_js.js b/test/javascript/tests/rewrite_js.js
index 22de6c940..0ccdd6515 100644
--- a/test/javascript/tests/rewrite_js.js
+++ b/test/javascript/tests/rewrite_js.js
@@ -345,6 +345,22 @@ couchTests.rewrite = function(debug) {
var xhr = CouchDB.request("GET", url);
TEquals(400, xhr.status);
+ // test requests with body preserve the query string rewrite
+ var ddoc_qs = {
+ "_id": "_design/qs",
+ "rewrites": "function (r) { return {path: '../../_changes', query: {'filter': '_doc_ids'}};};"
+ }
+ db.save(ddoc_qs);
+ db.save({"_id": "qs1", "foo": "bar"});
+ db.save({"_id": "qs2", "foo": "bar"});
+
+ var url = "/"+dbName+"/_design/qs/_rewrite";
+
+ var xhr = CouchDB.request("POST", url, {body: JSON.stringify({"doc_ids": ["qs2"]})});
+ var result = JSON.parse(xhr.responseText);
+ T(xhr.status == 200);
+ T(result.results.length == 1, "Only one doc is expected");
+ TEquals(result.results[0].id, "qs2");
// cleanup
db.deleteDb();
}