Repository: couchdb-chttpd
Updated Branches:
  refs/heads/master 297493f29 -> 53459aba5


Handle disconnect when receiving body

When any error happen on an underlying socket mochiweb uses
exit(normal). Add catch for exit:normal and convert it to
exit({bad_request, <<"Incomplete">>}).

COUCHDB-3158


Project: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/commit/38680995
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/tree/38680995
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/diff/38680995

Branch: refs/heads/master
Commit: 3868099565dbf8eb7851c50a2e2940f078aea14e
Parents: 297493f
Author: ILYA Khlopotov <iil...@apache.org>
Authored: Thu Sep 22 16:19:39 2016 -0700
Committer: ILYA Khlopotov <iil...@apache.org>
Committed: Wed Oct 5 09:30:28 2016 -0700

----------------------------------------------------------------------
 src/chttpd_external.erl | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/blob/38680995/src/chttpd_external.erl
----------------------------------------------------------------------
diff --git a/src/chttpd_external.erl b/src/chttpd_external.erl
index ec3afaa..1dccf2a 100644
--- a/src/chttpd_external.erl
+++ b/src/chttpd_external.erl
@@ -94,7 +94,11 @@ json_req_obj_field(<<"headers">>, #httpd{mochi_req=Req}, 
_Db, _DocId) ->
     to_json_terms(Hlist);
 json_req_obj_field(<<"body">>, #httpd{req_body=undefined, mochi_req=Req}, _Db, 
_DocId) ->
     MaxSize = config:get_integer("couchdb", "max_document_size", 4294967296),
-    Req:recv_body(MaxSize);
+    try
+        Req:recv_body(MaxSize)
+    catch exit:normal ->
+        exit({bad_request, <<"Invalid request body">>})
+    end;
 json_req_obj_field(<<"body">>, #httpd{req_body=Body}, _Db, _DocId) ->
     Body;
 json_req_obj_field(<<"peer">>, #httpd{mochi_req=Req}, _Db, _DocId) ->

Reply via email to