[core] preserve %2b and %2B in query string (fixes #2999)
normalize %2b or %2B in query string to %2B (uppercase hex), and not to '+' (thx int-e) x-ref: "url-normalize-required expands %2B in query strings" https://redmine.lighttpd.net/issues/2999personal/stbuehler/ci-build
parent
aaccb1bc5e
commit
9cdfb48466
|
@ -139,7 +139,9 @@ static int burl_normalize_basic_required_fix (buffer *b, buffer *t, int i, int q
|
|||
else if (s[i]=='%' && li_cton(s[i+1], n1) && li_cton(s[i+2], n2)) {
|
||||
const unsigned int x = (n1 << 4) | n2;
|
||||
if (!encoded_chars_http_uri_reqd[x]
|
||||
&& (qs < 0 ? (x!='/'&&x!='?') : (x!='&'&&x!='='&&x!=';'))) {
|
||||
&& (qs < 0
|
||||
? (x != '/' && x != '?')
|
||||
: (x != '&' && x != '=' && x != ';' && x != '+'))) {
|
||||
p[j] = x;
|
||||
}
|
||||
else {
|
||||
|
@ -177,7 +179,9 @@ static int burl_normalize_basic_required (buffer *b, buffer *t)
|
|||
}
|
||||
else if (s[i]=='%' && li_cton(s[i+1], n1) && li_cton(s[i+2], n2)
|
||||
&& (encoded_chars_http_uri_reqd[(x = (n1 << 4) | n2)]
|
||||
||(qs < 0 ? (x=='/'||x=='?') : (x=='&'||x=='='||x==';')))){
|
||||
|| (qs < 0
|
||||
? (x == '/' || x == '?')
|
||||
: (x == '&' || x == '=' || x == ';' || x == '+')))) {
|
||||
if (li_utf8_invalid_byte(x)) qs = -2;
|
||||
if (s[i+1] >= 'a') b->ptr[i+1] &= 0xdf; /* uppercase hex */
|
||||
if (s[i+2] >= 'a') b->ptr[i+2] &= 0xdf; /* uppercase hex */
|
||||
|
|
|
@ -78,6 +78,8 @@ static void test_burl_normalize (void) {
|
|||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/%2B"), CONST_STR_LEN("/+"));
|
||||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/%3a"), CONST_STR_LEN("/:"));
|
||||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/%3A"), CONST_STR_LEN("/:"));
|
||||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/%2b?x=%2b"), CONST_STR_LEN("/+?x=%2B"));
|
||||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/%2B?x=%2B"), CONST_STR_LEN("/+?x=%2B"));
|
||||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/~test%20ä_"), CONST_STR_LEN("/~test%20%C3%A4_"));
|
||||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/\375"), "", (size_t)-2);
|
||||
run_burl_normalize(psrc, ptmp, flags, __LINE__, CONST_STR_LEN("/\376"), "", (size_t)-2);
|
||||
|
|
Loading…
Reference in New Issue