From 3444ac7b623be292b2efc9039e717e3d26e1b2f7 Mon Sep 17 00:00:00 2001 From: Per Andersson Date: Wed, 15 Jan 2025 12:58:29 +0100 Subject: [PATCH] Stop redirect loops Stop redirects if the server path equals redirect prefix path. This stops redirect loops. --- src/yaws_server.erl | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/yaws_server.erl b/src/yaws_server.erl index 4fac9681..941c6dd9 100644 --- a/src/yaws_server.erl +++ b/src/yaws_server.erl @@ -2704,8 +2704,11 @@ deliver_redirect_map(CliSock, Req, Arg, %% Here Code is 1xx, 2xx, 4xx or 5xx ?Debug("in redir ~p", [Code]), deliver_xxx(CliSock, Req, Arg, Code); -deliver_redirect_map(_CliSock, _Req, Arg, - {_Prefix, Code, Path, Mode}, N) when is_list(Path) -> +deliver_redirect_map(_CliSock, #http_request{path = {abs_path, ReqPath}}, Arg, + {Prefix, Code, Path, Mode}, N) + when is_list(Path) andalso + %% Stop redirect loops + ReqPath /= Prefix -> %% Here Code is 1xx, 2xx, 4xx or 5xx ?Debug("in redir ~p", [Code]), Path1 = if @@ -2725,8 +2728,13 @@ deliver_redirect_map(_CliSock, _Req, Arg, put(yaws_arg, Arg), put(client_data_pos, N), {page, {[{status, Code}], Page}}; -deliver_redirect_map(CliSock, Req, Arg, - {_Prefix, Code, URL, Mode}, N) when is_record(URL, url) -> +deliver_redirect_map(CliSock, + #http_request{path = {abs_path, ReqPath}} = Req, Arg, + {Prefix, Code, URL, Mode}, N) + when is_record(URL, url) + andalso + %% Stop redirect loops + ReqPath == Prefix -> %% Here Code is 3xx ?Debug("in redir ~p", [Code]), H = get(outh),