From dfb23931e31bd997527adaf8be6ebe4e9667f4a5 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 12 Nov 2024 07:25:36 +0200 Subject: [PATCH] fix protocol-relative URI links resolve #1 --- src/line/link.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/line/link.rs b/src/line/link.rs index 5cbff40..5716d53 100644 --- a/src/line/link.rs +++ b/src/line/link.rs @@ -23,7 +23,18 @@ impl Link { ); // Detect address required to continue - let unresolved_address = regex.get(1)?; + let mut unresolved_address = regex.get(1)?.to_string(); + + // Seems that [Uri resolver](https://docs.gtk.org/glib/type_func.Uri.resolve_relative.html) + // does not support [protocol-relative URI](https://datatracker.ietf.org/doc/html/rfc3986#section-4.2) + // resolve manually + if unresolved_address.starts_with("//:") { + let scheme = match base { + Some(base) => base.scheme(), + None => return None, + }; + unresolved_address = unresolved_address.replace("//:", &format!("{scheme}://")); + } // Convert address to the valid URI let uri = match base { @@ -54,7 +65,7 @@ impl Link { // Base resolve not requested None => { // Just try convert address to valid URI - match Uri::parse(unresolved_address, UriFlags::NONE) { + match Uri::parse(&unresolved_address, UriFlags::NONE) { Ok(unresolved_uri) => unresolved_uri, Err(_) => return None, }