mirror of https://github.com/omar-polo/gmid.git
don't %-decode the query
This commit is contained in:
parent
709f4c9447
commit
8404ec301f
|
@ -1,3 +1,7 @@
|
|||
2021-02-05 Omar Polo <op@omarpolo.com>
|
||||
|
||||
* iri.c (parse_query): don't %-decode the query part. This affects the value of QUERY_STRING for CGI scripts too, since that must be %-encoded and we're currently shipping it decoded.
|
||||
|
||||
2021-02-04 Omar Polo <op@omarpolo.com>
|
||||
|
||||
* gmid.c (main): reload configuration on SIGHUP, without disconnecting the clients
|
||||
|
|
34
iri.c
34
iri.c
|
@ -45,13 +45,43 @@ sub_delimiters(int p)
|
|||
|| p == '=';
|
||||
}
|
||||
|
||||
static int
|
||||
valid_pct_enc_string(char *s)
|
||||
{
|
||||
if (*s != '%')
|
||||
return 1;
|
||||
|
||||
if (!isxdigit(s[1]) || !isxdigit(s[2]))
|
||||
return 0;
|
||||
|
||||
if (s[1] == '0' && s[2] == '0')
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
valid_pct_encoded(struct parser *p)
|
||||
{
|
||||
if (p->iri[0] != '%')
|
||||
return 0;
|
||||
|
||||
if (!valid_pct_enc_string(p->iri)) {
|
||||
p->err = "illegal percent-encoding";
|
||||
return 0;
|
||||
}
|
||||
|
||||
p->iri += 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
parse_pct_encoded(struct parser *p)
|
||||
{
|
||||
if (p->iri[0] != '%')
|
||||
return 0;
|
||||
|
||||
if (!isxdigit(p->iri[1]) || !isxdigit(p->iri[2])) {
|
||||
if (!valid_pct_enc_string(p->iri)) {
|
||||
p->err = "illegal percent-encoding";
|
||||
return 0;
|
||||
}
|
||||
|
@ -259,7 +289,7 @@ parse_query(struct parser *p)
|
|||
|| sub_delimiters(*p->iri)
|
||||
|| *p->iri == '/'
|
||||
|| *p->iri == '?'
|
||||
|| parse_pct_encoded(p)
|
||||
|| valid_pct_encoded(p)
|
||||
|| valid_multibyte_utf8(p))
|
||||
p->iri++;
|
||||
|
||||
|
|
|
@ -204,10 +204,10 @@ main(void)
|
|||
PASS,
|
||||
IRI("foo", "example.com", "", "foo/", "gne&foo", ""),
|
||||
"parse query strings");
|
||||
TEST("foo://example.com/foo/?gne%2F",
|
||||
PASS,
|
||||
IRI("foo", "example.com", "", "foo/", "gne/", ""),
|
||||
"parse query strings");
|
||||
/* TEST("foo://example.com/foo/?gne%2F", */
|
||||
/* PASS, */
|
||||
/* IRI("foo", "example.com", "", "foo/", "gne/", ""), */
|
||||
/* "parse query strings"); */
|
||||
|
||||
/* fragment */
|
||||
TEST("foo://bar.co/#foo",
|
||||
|
|
Loading…
Reference in New Issue