Ref: https://lists.busybox.net/pipermail/busybox/2025-July/091599.html

Patch:
>From bc23feef9326a43e20402dc49a3883affd9cf548 Mon Sep 17 00:00:00 2001
From: Ron Yorston <[email protected]>
Date: Sat, 27 Jul 2024 05:50:12 +0100
Subject: [PATCH] wget: let user override Content-Length. Closes 16138

The wget applet allows several common headers to be overridden by
the user.  Add 'Content-Length' to the list.  This is supported
by GNU wget.

function                                             old     new   delta
wget_main                                           3065    3087     +22
wget_user_headers                                     76      92     +16
.rodata                                           100275  100276      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 39/0)               Total: 39 bytes

Signed-off-by: Ron Yorston <[email protected]>
---
 networking/wget.c | 47 +++++++++++++++++++++++++++--------------------
 1 file changed, 27 insertions(+), 20 deletions(-)

diff --git a/networking/wget.c b/networking/wget.c
index 512bebfc2..009202c8c 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -208,36 +208,40 @@ static const char P_FTPS[] ALIGN1 = "ftps";
 #if ENABLE_FEATURE_WGET_LONG_OPTIONS
 /* User-specified headers prevent using our corresponding built-in headers.  */
 enum {
- HDR_HOST          = (1<<0),
- HDR_USER_AGENT    = (1<<1),
- HDR_RANGE         = (1<<2),
- HDR_CONTENT_TYPE  = (1<<3),
- HDR_AUTH          = (1<<4) * ENABLE_FEATURE_WGET_AUTHENTICATION,
- HDR_PROXY_AUTH    = (1<<5) * ENABLE_FEATURE_WGET_AUTHENTICATION,
+ HDR_HOST           = (1<<0),
+ HDR_USER_AGENT     = (1<<1),
+ HDR_RANGE          = (1<<2),
+ HDR_CONTENT_TYPE   = (1<<3),
+ HDR_CONTENT_LENGTH = (1<<4),
+ HDR_AUTH           = (1<<5) * ENABLE_FEATURE_WGET_AUTHENTICATION,
+ HDR_PROXY_AUTH     = (1<<6) * ENABLE_FEATURE_WGET_AUTHENTICATION,
 };
 static const char wget_user_headers[] ALIGN1 =
  "Host:\0"
  "User-Agent:\0"
  "Range:\0"
  "Content-Type:\0"
+ "Content-Length:\0"
 # if ENABLE_FEATURE_WGET_AUTHENTICATION
  "Authorization:\0"
  "Proxy-Authorization:\0"
 # endif
  ;
-# define USR_HEADER_HOST         (G.user_headers & HDR_HOST)
-# define USR_HEADER_USER_AGENT   (G.user_headers & HDR_USER_AGENT)
-# define USR_HEADER_RANGE        (G.user_headers & HDR_RANGE)
-# define USR_HEADER_CONTENT_TYPE (G.user_headers & HDR_CONTENT_TYPE)
-# define USR_HEADER_AUTH         (G.user_headers & HDR_AUTH)
-# define USR_HEADER_PROXY_AUTH   (G.user_headers & HDR_PROXY_AUTH)
+# define USR_HEADER_HOST           (G.user_headers & HDR_HOST)
+# define USR_HEADER_USER_AGENT     (G.user_headers & HDR_USER_AGENT)
+# define USR_HEADER_RANGE          (G.user_headers & HDR_RANGE)
+# define USR_HEADER_CONTENT_TYPE   (G.user_headers & HDR_CONTENT_TYPE)
+# define USR_HEADER_CONTENT_LENGTH (G.user_headers & HDR_CONTENT_LENGTH)
+# define USR_HEADER_AUTH           (G.user_headers & HDR_AUTH)
+# define USR_HEADER_PROXY_AUTH     (G.user_headers & HDR_PROXY_AUTH)
 #else /* No long options, no user-headers :( */
-# define USR_HEADER_HOST         0
-# define USR_HEADER_USER_AGENT   0
-# define USR_HEADER_RANGE        0
-# define USR_HEADER_CONTENT_TYPE 0
-# define USR_HEADER_AUTH         0
-# define USR_HEADER_PROXY_AUTH   0
+# define USR_HEADER_HOST           0
+# define USR_HEADER_USER_AGENT     0
+# define USR_HEADER_RANGE          0
+# define USR_HEADER_CONTENT_TYPE   0
+# define USR_HEADER_CONTENT_LENGTH 0
+# define USR_HEADER_AUTH           0
+# define USR_HEADER_PROXY_AUTH     0
 #endif

 /* Globals */
@@ -1271,11 +1275,14 @@ static void download_one_url(const char *url)
  "Content-Type: application/x-www-form-urlencoded\r\n"
  );
  }
+ if (!USR_HEADER_CONTENT_LENGTH)
+ SENDFMT(sfp, "Content-Length: %u\r\n",
+ (int)strlen(G.post_data)
+ );
  SENDFMT(sfp,
- "Content-Length: %u\r\n"
  "\r\n"
  "%s",
- (int) strlen(G.post_data), G.post_data
+ G.post_data
  );
  } else
 #endif
-- 
2.45.2
_______________________________________________
busybox mailing list
[email protected]
https://lists.busybox.net/mailman/listinfo/busybox

Reply via email to