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

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

for a quick fix, we can add is_integer(LenLeft) in each clause, to ensure an 
immediate process crash and a prompt failure to the user.

> 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