You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@couchdb.apache.org by GitBox <gi...@apache.org> on 2018/09/19 20:43:27 UTC

[GitHub] ermouth opened a new issue #1612: JS-rewritten post/put hangs or returns bad_request

ermouth opened a new issue #1612: JS-rewritten post/put hangs or returns bad_request
URL: https://github.com/apache/couchdb/issues/1612
 
 
   ## Expected Behavior
   JS rewrite, returning `{path:'whatever', method:'PUT', body:'body'} should send body to the rewritten endpoint.
   
   ## Current Behavior
   The `body` field of rewrite fn returned obj is in some cases dropped. If source request was POST/PUT, the rewritten requests hangs, or, if source request was GET-like, `bad_request` error is sent as response.
   
   ## Steps to Reproduce
   1. Create empty bucket named, say, `zz`
   2. Put design doc with `rewrites` into the bucket. Below ddoc is intended to create new random doc on each request to `_design/n/_rewrite` endpoint:
   ````
   {
     "_id": "_design/n",
     "rewrites": "function (r) {\n\tvar id = 'x'+(Date.now()+'').substr(-8);\n\treturn {\n\t\tpath:'../../'+id,\n\t\tmethod:'PUT',\n\t\theaders:{'content-type':'application/json',Accept:'application/json'},\n\t\tbody:JSON.stringify({_id:id,type:'test',val:Date.now().toString(36)})\n\t}\n}"
   }
   ```` 
   3. Call `http://couchdb_ip/zz/_design/n/_rewrite`.
   
   ## Solution
   The issue is caused by cleaning-up rewritten request prematurely here:
   https://github.com/apache/couchdb/blob/master/src/chttpd/src/chttpd_rewrite.erl#L67. 
   It should only be cleaned if we have no body to send.
   
   That line (L67) should be replaced with this code:
   ````
               Body = case couch_util:get_value(<<"body">>, Props) of
                   undefined -> erlang:get(mochiweb_request_body);
                   B -> B
               end,
               case Body of
                   undefined -> MochiReq:cleanup();
                   _ -> erlang:put(mochiweb_request_body, Body)
               end,
   ````
   It fixes issue completely.
   
   ## Your Environment
   * Version used: 2.1.2, 2.2.0
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services