diff --git a/servehelper.cpp b/servehelper.cpp index 7eaee0d..66d236d 100644 --- a/servehelper.cpp +++ b/servehelper.cpp @@ -241,20 +241,29 @@ static inline void preprocess_link(const httplib::Request& req, const std::strin const lxb_char_t* cls_c = lxb_dom_element_class(element, &cls_c_len); std::string cls = cls_c ? std::string(reinterpret_cast(cls_c), cls_c_len) : ""; - CurlUrl href_url; - href_url.set(CURLUPART_URL, get_origin(req)); - href_url.set(CURLUPART_PATH, std::string(href_url.get(CURLUPART_PATH).get()) + req.path); - href_url.set(CURLUPART_URL, href); - CurlUrl instance_url_base; - instance_url_base.set(CURLUPART_SCHEME, "https"); - instance_url_base.set(CURLUPART_HOST, domain_name); - // .mention is used in note and posts - // Instance base is used for link fields - if (std::regex_search(cls, mention_class_re) || starts_with(href_url, instance_url_base)) { - // Proxy this instance's URLs to Coyote - href = proxy_mastodon_url(req, std::move(href)); + try { + CurlUrl href_url; + href_url.set(CURLUPART_URL, get_origin(req)); + href_url.set(CURLUPART_PATH, std::string(href_url.get(CURLUPART_PATH).get()) + req.path); + href_url.set(CURLUPART_URL, href); - lxb_dom_element_set_attribute(element, reinterpret_cast("href"), 4, reinterpret_cast(href.data()), href.size()); + CurlUrl instance_url_base; + instance_url_base.set(CURLUPART_SCHEME, "https"); + instance_url_base.set(CURLUPART_HOST, domain_name); + + // .mention is used in note and posts + // Instance base is used for link fields + if (std::regex_search(cls, mention_class_re) || starts_with(href_url, instance_url_base)) { + // Proxy this instance's URLs to Coyote + href = proxy_mastodon_url(req, std::move(href)); + + lxb_dom_element_set_attribute(element, reinterpret_cast("href"), 4, reinterpret_cast(href.data()), href.size()); + } + } catch (const CurlUrlException& e) { + // example: on eldritch.cafe/about + if (e.code != CURLUE_MALFORMED_INPUT) { + throw; + } } if (should_fix_link(element, cls)) {