[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnurl] 248/411: urlapi: URL encode a '+' in the query part
From: |
gnunet |
Subject: |
[gnurl] 248/411: urlapi: URL encode a '+' in the query part |
Date: |
Wed, 13 Jan 2021 01:21:03 +0100 |
This is an automated email from the git hooks/post-receive script.
nikita pushed a commit to branch master
in repository gnurl.
commit b7ea3d2c22fe76fd85d1c5c6672829960d1d6e36
Author: Daniel Stenberg <daniel@haxx.se>
AuthorDate: Thu Oct 15 12:22:27 2020 +0200
urlapi: URL encode a '+' in the query part
... when asked to with CURLU_URLENCODE.
Extended test 1560 to verify.
Reported-by: Dietmar Hauser
Fixes #6086
Closes #6087
---
lib/urlapi.c | 27 +++++++--------------------
tests/libtest/lib1560.c | 7 +++++++
2 files changed, 14 insertions(+), 20 deletions(-)
diff --git a/lib/urlapi.c b/lib/urlapi.c
index 88b7f042f..c429d92ab 100644
--- a/lib/urlapi.c
+++ b/lib/urlapi.c
@@ -1387,28 +1387,17 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
if(urlencode) {
const unsigned char *i;
char *o;
- bool free_part = FALSE;
char *enc = malloc(nalloc * 3 + 1); /* for worst case! */
if(!enc)
return CURLUE_OUT_OF_MEMORY;
- if(plusencode) {
- /* space to plus */
- i = (const unsigned char *)part;
- for(o = enc; *i; ++o, ++i)
- *o = (*i == ' ') ? '+' : *i;
- *o = 0; /* null-terminate */
- part = strdup(enc);
- if(!part) {
- free(enc);
- return CURLUE_OUT_OF_MEMORY;
- }
- free_part = TRUE;
- }
for(i = (const unsigned char *)part, o = enc; *i; i++) {
- if(Curl_isunreserved(*i) ||
- ((*i == '/') && urlskipslash) ||
- ((*i == '=') && equalsencode) ||
- ((*i == '+') && plusencode)) {
+ if((*i == ' ') && plusencode) {
+ *o = '+';
+ o++;
+ }
+ else if(Curl_isunreserved(*i) ||
+ ((*i == '/') && urlskipslash) ||
+ ((*i == '=') && equalsencode)) {
if((*i == '=') && equalsencode)
/* only skip the first equals sign */
equalsencode = FALSE;
@@ -1422,8 +1411,6 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
}
*o = 0; /* null-terminate */
newp = enc;
- if(free_part)
- free((char *)part);
}
else {
char *p;
diff --git a/tests/libtest/lib1560.c b/tests/libtest/lib1560.c
index cc61199e9..387ee8dad 100644
--- a/tests/libtest/lib1560.c
+++ b/tests/libtest/lib1560.c
@@ -478,6 +478,13 @@ static int checkurl(const char *url, const char *out)
/* !checksrc! disable SPACEBEFORECOMMA 1 */
static struct setcase set_parts_list[] = {
+ {"https://example.com/",
+ "query=Al2cO3tDkcDZ3EWE5Lh+LX8TPHs,", /* contains '+' */
+ "https://example.com/?Al2cO3tDkcDZ3EWE5Lh%2bLX8TPHs",
+ CURLU_URLDECODE, /* decode on get */
+ CURLU_URLENCODE, /* encode on set */
+ CURLUE_OK, CURLUE_OK},
+
{"https://example.com/",
/* Set a 41 bytes scheme. That's too long so the old scheme remains set. */
"scheme=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc,",
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnurl] 262/411: runtests: revert the mistaken edit of $CURL, (continued)
- [gnurl] 262/411: runtests: revert the mistaken edit of $CURL, gnunet, 2021/01/12
- [gnurl] 195/411: libssh2: handle the SSH protocols done over HTTPS proxy, gnunet, 2021/01/12
- [gnurl] 230/411: src/Makefile.m32: fix undefined curlx_dyn_* errors, gnunet, 2021/01/12
- [gnurl] 263/411: CI/travis: add brotli and zstd to the libssh2 build, gnunet, 2021/01/12
- [gnurl] 203/411: configure: don't say HTTPS-proxy is enabled when disabled!, gnunet, 2021/01/12
- [gnurl] 245/411: docs/FEATURE: convert to markdown, gnunet, 2021/01/12
- [gnurl] 229/411: HISTORY: curl verifies SSL certs by default since version 7.10, gnunet, 2021/01/12
- [gnurl] 219/411: docs/opts: fix typos in two manual pages, gnunet, 2021/01/12
- [gnurl] 201/411: MANUAL: update examples to resolve without redirects, gnunet, 2021/01/12
- [gnurl] 210/411: vtls: deduplicate some DISABLE_PROXY ifdefs, gnunet, 2021/01/12
- [gnurl] 248/411: urlapi: URL encode a '+' in the query part,
gnunet <=
- [gnurl] 257/411: CURLOPT_NOBODY.3: fix typo, gnunet, 2021/01/12
- [gnurl] 256/411: CI/azure: improve on flakiness by avoiding libtool wrappers, gnunet, 2021/01/12
- [gnurl] 221/411: runtests: add %repeat[]% for test files, gnunet, 2021/01/12
- [gnurl] 294/411: header.d: fix syntax mistake, gnunet, 2021/01/12
- [gnurl] 333/411: docs: document the 8MB input string limit, gnunet, 2021/01/12
- [gnurl] 289/411: header.d: mention the "Transfer-Encoding: chunked" handling, gnunet, 2021/01/12
- [gnurl] 297/411: tool_debug_cb: do not assume zero-terminated data, gnunet, 2021/01/12
- [gnurl] 311/411: curl.se: new home, gnunet, 2021/01/12
- [gnurl] 273/411: libssh2: fix build with disabled proxy support, gnunet, 2021/01/12
- [gnurl] 253/411: openssl: acknowledge SRP disabling in configure properly, gnunet, 2021/01/12