You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2015/07/29 19:33:47 UTC
chttpd commit: updated refs/heads/master to f9cad9d
Repository: couchdb-chttpd
Updated Branches:
refs/heads/master 07493ef4c -> f9cad9dd1
Port max_rewrites to chttpd
This commit incorporates the original work by Ronny Pfannschmidt
<Ro...@gmx.de> and myself for COUCHDB-1441 and COUCHDB-1651.
Project: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/commit/f9cad9dd
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/tree/f9cad9dd
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/diff/f9cad9dd
Branch: refs/heads/master
Commit: f9cad9dd19fd175d8b26da3d5af10ba70e3513d1
Parents: 07493ef
Author: Robert Newson <rn...@apache.org>
Authored: Wed Jul 29 18:17:27 2015 +0100
Committer: Robert Newson <rn...@apache.org>
Committed: Wed Jul 29 18:23:10 2015 +0100
----------------------------------------------------------------------
src/chttpd.erl | 1 +
src/chttpd_rewrite.erl | 9 +++++++++
2 files changed, 10 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/blob/f9cad9dd/src/chttpd.erl
----------------------------------------------------------------------
diff --git a/src/chttpd.erl b/src/chttpd.erl
index 1e80a53..31c16d3 100644
--- a/src/chttpd.erl
+++ b/src/chttpd.erl
@@ -130,6 +130,7 @@ stop() ->
handle_request(MochiReq0) ->
Begin = os:timestamp(),
+ erlang:put(?REWRITE_COUNT, 0),
MochiReq = couch_httpd_vhost:dispatch_host(MochiReq0),
case config:get("chttpd", "socket_options") of
http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/blob/f9cad9dd/src/chttpd_rewrite.erl
----------------------------------------------------------------------
diff --git a/src/chttpd_rewrite.erl b/src/chttpd_rewrite.erl
index 902f6e9..87198d4 100644
--- a/src/chttpd_rewrite.erl
+++ b/src/chttpd_rewrite.erl
@@ -119,6 +119,15 @@ handle_rewrite_req(#httpd{
Prefix = <<"/", DbName/binary, "/", DesignId/binary>>,
QueryList = lists:map(fun decode_query_value/1, chttpd:qs(Req)),
+ RewritesSoFar = erlang:get(?REWRITE_COUNT),
+ MaxRewrites = config:get_integer("httpd", "rewrite_limit", 100),
+ case RewritesSoFar >= MaxRewrites of
+ true ->
+ throw({bad_request, <<"Exceeded rewrite recursion limit">>});
+ false ->
+ erlang:put(?REWRITE_COUNT, RewritesSoFar + 1)
+ end,
+
#doc{body={Props}} = DDoc,
% get rules from ddoc