diff options
author | Omar Polo <op@omarpolo.com> | 2021-01-15 09:27:42 +0000 |
---|---|---|
committer | Omar Polo <op@omarpolo.com> | 2021-01-15 09:27:42 +0000 |
commit | e4d82becb71b1b8f9c843a5f0f8657bc6b93c67b (patch) | |
tree | 6dd08f9b3b6bc14a573d31f00026dc7a2c3e49d3 | |
parent | 15902770073dd67df3a9af0f6da7d63bfb031d72 (diff) |
normalize host name when parsing the IRI
RFC3986 3.2.2 "Host" says that
> Although host is case-insensitive, producers and normalizers should
> use lowercase for registered names and hexadecimal addresses for the
> sake of uniformity, while only using uppercase letters for
> percent-encodings.
so we cope with that.
-rw-r--r-- | iri.c | 6 | ||||
-rw-r--r-- | iri_test.c | 4 |
2 files changed, 9 insertions, 1 deletions
@@ -146,8 +146,12 @@ parse_authority(struct parser *p) while (unreserved(*p->iri) || sub_delimiters(*p->iri) - || parse_pct_encoded(p)) + || parse_pct_encoded(p)) { + /* normalize the host name. */ + if (*p->iri < 0x7F) + *p->iri = tolower(*p->iri); p->iri++; + } if (p->err != NULL) return 0; @@ -123,6 +123,10 @@ main(void) FAIL, empty, "FAIL with invalid port number"); + TEST("gemini://OmArPoLo.CoM", + PASS, + IRI("gemini", "omarpolo.com", "", "", "", ""), + "host is case-insensitive"); /* path */ TEST("gemini://omarpolo.com/foo/bar/baz", |