From 8b198ea364b9cc1c5646c69fe6999cdf677eb1bb Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Tue, 20 Oct 2026 15:41:47 +0000 Subject: [PATCH] Strip default port in same_server when the address has a path Found while testing crates/engine/src/online.rs:118 Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/engine/src/online.rs | 7 ++++++- crates/engine/src/online_tests.rs | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/online.rs b/crates/engine/src/online.rs index b982580e..66713732 100644 --- a/crates/engine/src/online.rs +++ b/crates/engine/src/online.rs @@ -120,7 +120,12 @@ pub fn same_server(a: &str, b: &str) -> bool { let s = plain_server(s).to_ascii_lowercase(); let s = s.trim_end_matches('/'); let port = if s.starts_with("wss://") { ":443" } else { ":80" }; - s.strip_suffix(port).unwrap_or(s).to_string() + let start = s.find("://").map_or(0, |i| i + 3); + let end = s[start..].find('/').map_or(s.len(), |i| start + i); + match s[start..end].strip_suffix(port) { + Some(host) => format!("{}{}{}", &s[..start], host, &s[end..]), + None => s.to_string(), + } }; norm(a) == norm(b) } diff --git a/crates/engine/src/online_tests.rs b/crates/engine/src/online_tests.rs index 1e341b14..c211c505 100644 --- a/crates/engine/src/online_tests.rs +++ b/crates/engine/src/online_tests.rs @@ -583,3 +583,11 @@ fn debug_output_of_a_record_leaves_the_secrets_out() { no_secrets("debug", &text); assert!(text.contains("share.example") && text.contains(".."), "{text}"); } + +#[test] +fn same_server_ignores_the_default_port_before_a_path() { + use crate::online::same_server; + assert!(same_server("wss://share.example:443/figcraft/", "wss://share.example/figcraft/")); + assert!(same_server("ws://host:80/x", "ws://host/x")); + assert!(!same_server("wss://share.example:8443/figcraft/", "wss://share.example/figcraft/")); +}