Skip to content

Commit a3ba88c

Browse files
committed
Preserve query string rewrite when the request contains a body
1 parent 7bc5d4e commit a3ba88c

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/chttpd/src/chttpd_rewrite.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,9 @@ do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) when is_list(Props)
7171
undefined -> erlang:get(mochiweb_request_body);
7272
B -> B
7373
end,
74+
NewMochiReq:cleanup(),
7475
case Body of
75-
undefined -> NewMochiReq:cleanup();
76+
undefined -> [];
7677
_ -> erlang:put(mochiweb_request_body, Body)
7778
end,
7879
couch_log:debug("rewrite to ~p", [Path]),

test/javascript/tests/rewrite_js.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,22 @@ couchTests.rewrite = function(debug) {
345345
var xhr = CouchDB.request("GET", url);
346346
TEquals(400, xhr.status);
347347

348+
// test requests with body preserve the query string rewrite
349+
var ddoc_qs = {
350+
"_id": "_design/qs",
351+
"rewrites": "function (r) { return {path: '../../_changes', query: {'filter': '_doc_ids'}};};"
352+
}
353+
db.save(ddoc_qs);
354+
db.save({"_id": "qs1", "foo": "bar"});
355+
db.save({"_id": "qs2", "foo": "bar"});
356+
357+
var url = "/"+dbName+"/_design/qs/_rewrite";
358+
359+
var xhr = CouchDB.request("POST", url, {body: JSON.stringify({"doc_ids": ["qs2"]})});
360+
var result = JSON.parse(xhr.responseText);
361+
T(xhr.status == 200);
362+
T(result.results.length == 1, "Only one doc is expected");
363+
TEquals(result.results[0].id, "qs2");
348364
// cleanup
349365
db.deleteDb();
350366
}

0 commit comments

Comments
 (0)