[ 
https://issues.apache.org/jira/browse/COUCHDB-2295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14099970#comment-14099970
 ] 

Robert Newson commented on COUCHDB-2295:
----------------------------------------

To clarify, receive_request_data/2 is not the origin of the bug, it's just the 
first place that goes wrong given an unexpected input. The multipart request 
form was added for the replicator originally, and it always forms a correctly 
encoded request. The code to support chunked multipart requests is just not 
present currently, I believe.

> Connection hangs on document update for multipart/related and transfer 
> encoding chunked request
> -----------------------------------------------------------------------------------------------
>
>                 Key: COUCHDB-2295
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-2295
>             Project: CouchDB
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: HTTP Interface
>            Reporter: Alexander Shorin
>
> Script to reproduce:
> {code}
> import pprint
> import requests
> body = [
>     b'--996713c691ec4fd5b717ef2740893b78\r\n',
>     b'Content-Type: application/json\r\n',
>     b'\r\n',
>     b'{"_id": "test","_attachments": {"foo": {"follows": true, 
> "content_type": "text/plain", "length": 12}}}\r\n',
>     b'--996713c691ec4fd5b717ef2740893b78\r\n',
>     b'Content-Type: text/plain\r\n'
>     b'Content-Disposition: attachment;filename="foo"\r\n'
>     b'Content-Length: 12\r\n'
>     b'\r\n',
>     b'Time to Relax!',
>     b'--996713c691ec4fd5b717ef2740893b78--\r\n'
> ]
> url = 'http://localhost:5984/db/test'
> headers = {
>     'Content-Type': 'multipart/related; 
> boundary="996713c691ec4fd5b717ef2740893b78"'
> }
> resp = requests.put(url, headers=headers, data=iter(body))
> pprint.pprint(resp.json())
> {code}
> This runs a request:
> {code}
> PUT /db/test HTTP/1.1
> Host: localhost:5984
> Accept-Encoding: gzip, deflate
> Transfer-Encoding: chunked
> User-Agent: python-requests/2.3.0 CPython/3.4.1 Linux/3.15.5-gentoo
> Accept: */*
> Content-Type: multipart/related; boundary="996713c691ec4fd5b717ef2740893b78"
> 24
> --996713c691ec4fd5b717ef2740893b78
> 20
> Content-Type: application/json
> 2
> 68
> {"_id": "test","_attachments": {"foo": {"follows": true, "content_type": 
> "text/plain", "length": 14}}}
> 24
> --996713c691ec4fd5b717ef2740893b78
> 60
> Content-Type: text/plain
> Content-Disposition: attachment;filename="foo"
> Content-Length: 12
> e
> Time to Relax!
> 26
> --996713c691ec4fd5b717ef2740893b78--
> 0
> {code}
> But connection hangs: CouchDB thinks that there have to more data while zero 
> length chunk had been send and doesn't reply with anything back to client 
> which had finished the request and awaits for the response.
> The problem could be "fixed" by specifying full Content-Length of multipart 
> body in request, which kills all the idea of chunked transfer.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to