aboutsummaryrefslogtreecommitdiff
path: root/networking/wget.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-04-24 13:35:32 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2018-04-24 13:35:32 +0200
commitdf45eb49acaeb64574e14f78c6bb5b95f1157058 (patch)
tree7e6dc15d1eea8b9b6461489de3609ed0db1555af /networking/wget.c
parentf4eaccbfaee58d00f53fe106d018f4e9687b2e27 (diff)
downloadbusybox-df45eb49acaeb64574e14f78c6bb5b95f1157058.tar.gz
wget: handle URLs with @ or hash differently
If server replied with 302 and Location: ?foo we used to underflow the allocated space while trying to form the "@foo" filename. Switch to forming "foo" filename. function old new delta packed_usage 32795 32799 +4 parse_url 387 352 -35 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-35) Total: -31 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/wget.c')
-rw-r--r--networking/wget.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/networking/wget.c b/networking/wget.c
index b6c76e9dc..30c339244 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -539,7 +539,7 @@ static void parse_url(const char *src_url, struct host_info *h)
// and saves 'index.html?var=a%2Fb' (we save 'b')
// wget 'http://busybox.net?login=john@doe':
// request: 'GET /?login=john@doe HTTP/1.0'
- // saves: 'index.html?login=john@doe' (we save '?login=john@doe')
+ // saves: 'index.html?login=john@doe' (we save 'login=john@doe')
// wget 'http://busybox.net#test/test':
// request: 'GET / HTTP/1.0'
// saves: 'index.html' (we save 'test')
@@ -553,13 +553,13 @@ static void parse_url(const char *src_url, struct host_info *h)
} else if (*sp == '/') {
*sp = '\0';
h->path = sp + 1;
- } else { // '#' or '?'
+ } else {
+ // sp points to '#' or '?'
+ // Note:
// http://busybox.net?login=john@doe is a valid URL
- // memmove converts to:
- // http:/busybox.nett?login=john@doe...
- memmove(h->host - 1, h->host, sp - h->host);
- h->host--;
- sp[-1] = '\0';
+ // (without '/' between ".net" and "?"),
+ // can't store NUL at sp[-1] - this destroys hostname.
+ *sp++ = '\0';
h->path = sp;
}