Commits


iri: rewrite remove_dot_segments to be clearer the previous version was straight out RFC3986 (more or less, it had a bug I didn't spot), but it's ugly and extremely long. Rewrite it to be somewhat inspired by canonpath (from kern_pledge.c) and way simpler. There are some small differences in how UNIX paths and URLs paths are canonized (in UNIX path you don't care too much of a trailing '/', in URLs you do.) The new code is more clear and passes all the tests in RFC3986, so I'm calling it a win.


iri: fix remove_dot_segments algorithm i've misread the description in the RFC; we should copy up to, but not including, the next '/' at the end and manually inject some '/' in some other cases.


iri: fix remove_dot_segments: should copy until (including) "/"


iri: fix typo: should check the first two characters, not three


iri: fix path check path should *start* with "/" to enter that branch, not be exactly "/".


iri: fix logic in iri_unparse make sure path starts with "/" only when there's an authority part, not when it's not there!


iri: drop extraneous cpfields(IH_QUERY)


iri: set some flags as defined only when actually copying


iri: draft iri_unparse


iri: avoid unpleasant infinite loop in remove_dot_segments need to copy until the *next* path segment, otherwise we loop indefinitely if *p == '/'.


iri: catch remove_dot_segments/mergepath failures and set errno


iri: first try at remove_dot_segments and mergepath


iri: lowercase scheme and host (part of URI normalization)


use the new iri parser in ir_select_gemini While here also add some error checking.


use the new iri parser in parse.y for proxy validation