commit f5bc8482f4f41abd20e767dd613fc323713f3820 from: Omar Polo date: Sat Dec 24 18:17:14 2022 UTC iri: catch remove_dot_segments/mergepath failures and set errno commit - 871b5bb7caa2a9144d00f5f4711c18aa861bce88 commit + f5bc8482f4f41abd20e767dd613fc323713f3820 blob - d1961d58cf839e88952aebcdaae46b7be773e5fa blob + 152a34c6023838c2691b4cd1052849df3caeeccb --- iri.c +++ iri.c @@ -572,13 +572,16 @@ iri_parse(const char *base, const char *str, struct ir if (base == NULL) { ibase.iri_flags = 0; - if (parse_uri(str, &iparsed) == -1) + if (parse_uri(str, &iparsed) == -1) { + errno = EINVAL; return (-1); + } } else { - if (parse_uri(base, &ibase) == -1) - return (-1); - if (parse(str, &iparsed) == -1) + if (parse_uri(base, &ibase) == -1 || + parse(str, &iparsed) == -1) { + errno = EINVAL; return (-1); + } } if (iparsed.iri_flags & IH_SCHEME) { @@ -616,10 +619,11 @@ iri_parse(const char *base, const char *str, struct ir ibase.iri_path[0] = '\0'; if (!(iparsed.iri_flags & IH_PATH)) iparsed.iri_path[0] = '\0'; - mergepath(iri->iri_path, sizeof(iri->iri_path), - ibase.iri_path, iparsed.iri_path); + if (mergepath(iri, &ibase, &iparsed) == -1) + return (-1); } - remove_dot_segments(iri); + if (remove_dot_segments(iri) == -1) + return (-1); cpfields(iri, &ibase, IH_QUERY); return (0); }