Return-Path: X-Original-To: apmail-couchdb-dev-archive@www.apache.org Delivered-To: apmail-couchdb-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 55D48DEFA for ; Sun, 12 Aug 2012 15:54:55 +0000 (UTC) Received: (qmail 22378 invoked by uid 500); 12 Aug 2012 15:54:54 -0000 Delivered-To: apmail-couchdb-dev-archive@couchdb.apache.org Received: (qmail 22345 invoked by uid 500); 12 Aug 2012 15:54:54 -0000 Mailing-List: contact dev-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list dev@couchdb.apache.org Received: (qmail 22336 invoked by uid 99); 12 Aug 2012 15:54:54 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 12 Aug 2012 15:54:54 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of bchesneau@gmail.com designates 209.85.217.180 as permitted sender) Received: from [209.85.217.180] (HELO mail-lb0-f180.google.com) (209.85.217.180) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 12 Aug 2012 15:54:46 +0000 Received: by lbon10 with SMTP id n10so1505581lbo.11 for ; Sun, 12 Aug 2012 08:54:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=hzMv3tqDs1vPTkboFYZROrcqHPfA70u0tcrRKtRvu8s=; b=th1nVht0uR+ZjnAcDYh/x14dsxyEHhGXzhFreskIw7N97QgoTjxHnVI93WPL6u4NLX 3im8gVO3o2g+j2wF8vE+VR66BOk+JlGiCdDuVtkwgESSIyaSDwCZYEfeN8/B3mVvWd7u qnmbGbPvYpTCU5QfHKBe6QRSlVIyvHq7JGH5tSrm0Az4kf1P+We19IOCiBzaPsOZMDSi qHvWz8tp2GkAOhknA1iifkXfhVRPgMz1atitzRQ2jTsWlYxd4BF5Ndo2WAnfCV/1xZt4 Yn63IB/phn9ee+UCqjHLt62vIVhsEtU6ic6aFsSEd1QdptddRhzz0EppV0gmdi1FCemq 9VNg== MIME-Version: 1.0 Received: by 10.152.103.11 with SMTP id fs11mr9095781lab.23.1344786866280; Sun, 12 Aug 2012 08:54:26 -0700 (PDT) Received: by 10.112.19.104 with HTTP; Sun, 12 Aug 2012 08:54:26 -0700 (PDT) In-Reply-To: <20120811230933.73B9B1C78D@tyr.zones.apache.org> References: <20120811230933.73B9B1C78D@tyr.zones.apache.org> Date: Sun, 12 Aug 2012 17:54:26 +0200 Message-ID: Subject: Re: git commit: Restore max_document_size protection From: Benoit Chesneau To: dev@couchdb.apache.org Content-Type: text/plain; charset=ISO-8859-1 On Sun, Aug 12, 2012 at 1:09 AM, wrote: > Updated Branches: > refs/heads/honor-max_document_size [created] bf1eb135f > > > Restore max_document_size protection > > > Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo > Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/bf1eb135 > Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/bf1eb135 > Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/bf1eb135 > > Branch: refs/heads/honor-max_document_size > Commit: bf1eb135f2b46861474b9276dee02d8edb05fe3b > Parents: bde29be > Author: Robert Newson > Authored: Sat Aug 11 23:48:59 2012 +0100 > Committer: Robert Newson > Committed: Sat Aug 11 23:48:59 2012 +0100 > > ---------------------------------------------------------------------- > src/couchdb/couch_httpd.erl | 36 ++++++++++-------------------------- > 1 files changed, 10 insertions(+), 26 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/couchdb/blob/bf1eb135/src/couchdb/couch_httpd.erl > ---------------------------------------------------------------------- > diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl > index 9bdc08d..90d5c80 100644 > --- a/src/couchdb/couch_httpd.erl > +++ b/src/couchdb/couch_httpd.erl > @@ -340,6 +340,8 @@ handle_request_int(MochiReq, DefaultFun, > " must be built with Erlang OTP R13B04 or higher.", > ?LOG_ERROR("~s", [ErrorReason]), > send_error(HttpReq, {bad_otp_release, ErrorReason}); > + exit:{body_too_large, _} -> > + send_error(HttpReq, request_entity_too_large); > throw:Error -> > Stack = erlang:get_stacktrace(), > ?LOG_DEBUG("Minor error in HTTP request: ~p",[Error]), > @@ -526,33 +528,13 @@ recv_chunked(#httpd{mochi_req=MochiReq}, MaxChunkSize, ChunkFun, InitState) -> > % called with Length == 0 on the last time. > MochiReq:stream_body(MaxChunkSize, ChunkFun, InitState). > > -body_length(Req) -> > - case header_value(Req, "Transfer-Encoding") of > - undefined -> > - case header_value(Req, "Content-Length") of > - undefined -> undefined; > - Length -> list_to_integer(Length) > - end; > - "chunked" -> chunked; > - Unknown -> {unknown_transfer_encoding, Unknown} > - end. > +body_length(#httpd{mochi_req=MochiReq}) -> > + MochiReq:get(body_length). > > -body(#httpd{mochi_req=MochiReq, req_body=undefined} = Req) -> > - case body_length(Req) of > - undefined -> > - MaxSize = list_to_integer( > - couch_config:get("couchdb", "max_document_size", "4294967296")), > - MochiReq:recv_body(MaxSize); > - chunked -> > - ChunkFun = fun({0, _Footers}, Acc) -> > - lists:reverse(Acc); > - ({_Len, Chunk}, Acc) -> > - [Chunk | Acc] > - end, > - recv_chunked(Req, 8192, ChunkFun, []); > - Len -> > - MochiReq:recv_body(Len) > - end; > +body(#httpd{mochi_req=MochiReq, req_body=undefined}) -> > + MaxSize = list_to_integer( > + couch_config:get("couchdb", "max_document_size", "4294967296")), > + MochiReq:recv_body(MaxSize); > body(#httpd{req_body=ReqBody}) -> > ReqBody. > > @@ -814,6 +796,8 @@ error_info({unauthorized, Msg}) -> > error_info(file_exists) -> > {412, <<"file_exists">>, <<"The database could not be " > "created, the file already exists.">>}; > +error_info(request_entity_too_large) -> > + {413, <<"too_large">>, <<"the request entity is too large">>}; > error_info({bad_ctype, Reason}) -> > {415, <<"bad_content_type">>, Reason}; > error_info(requested_range_not_satisfiable) -> > +1