From e939e55a50716b1f8130b718fe885f87e2c171b1 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Mon, 25 May 2020 23:21:07 +0900 Subject: [PATCH] webclient.c: Limit the number of redirections --- netutils/webclient/webclient.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/netutils/webclient/webclient.c b/netutils/webclient/webclient.c index 944d7f7b6..a2aa492b0 100644 --- a/netutils/webclient/webclient.c +++ b/netutils/webclient/webclient.c @@ -103,6 +103,11 @@ # define CONFIG_WEBCLIENT_TIMEOUT 10 #endif +#ifndef CONFIG_WEBCLIENT_MAX_REDIRECT +/* The default value 50 is taken from curl's --max-redirs option. */ +# define CONFIG_WEBCLIENT_MAX_REDIRECT 50 +#endif + #define WEBCLIENT_STATE_STATUSLINE 0 #define WEBCLIENT_STATE_HEADERS 1 #define WEBCLIENT_STATE_DATA 2 @@ -467,6 +472,7 @@ static int wget_base(FAR const char *url, FAR char *buffer, int buflen, struct wget_s *ws; struct timeval tv; bool redirected; + unsigned int nredirect = 0; char *dest; int sockfd; int len; @@ -685,6 +691,13 @@ static int wget_base(FAR const char *url, FAR char *buffer, int buflen, else { redirected = true; + nredirect++; + if (nredirect > CONFIG_WEBCLIENT_MAX_REDIRECT) + { + nerr("ERROR: too many redirects (%u)\n", nredirect); + goto errout; + } + close(sockfd); break; }