Both add paths, the CLI's and the web's, look behind the URL first: a web page that names its feed with <link rel="alternate"> is swapped for that feed, before the duplicate check so it finds a feed someone already has. Before, the page itself was added and every scan failed on it. alternate_feed_link found tags in a to_lowercase() copy and sliced the original at those offsets; Unicode lowercasing changes some characters' length, so a page with one before its <link> tags lost the href or panicked off a char boundary. ASCII lowercasing keeps offsets aligned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -606,7 +606,7 @@ async fn add(
|
||||
keywords: Vec<String>,
|
||||
) -> Result<()> {
|
||||
let mut cfg = (*ctx.cfg()).clone();
|
||||
let url = &feed::expand_input(url);
|
||||
let url = &feed::feed_behind_page(&ctx.client, &feed::expand_input(url)).await;
|
||||
// Includes feeds derived from an OPML, or the same show could be added twice.
|
||||
if let Some(existing) = subscriptions(ctx).await?.iter().find(|s| feed::same_feed(&s.cfg.url, url)) {
|
||||
anyhow::bail!("already subscribed as {:?}", existing.id);
|
||||
|
||||
Reference in New Issue
Block a user