Skip to content

Private feed redaction misses quoted terminal-dot hostname aliases #441

Closed

Description

@chhoumann

A private feed address quoted in a metadata string can survive redaction when its hostname adds a terminal dot. The saved address and the quoted address reach the same DNS host, but canonicalUrl retains the dot, so the lookup does not match.

Reproduced in redactPrivateFeedAddresses at master 921be0d and with the PERF3 expression change. This predates PERF3. The publisher classifier already recognizes the dotted Supercast address as private.

const known = "https://priv3.supercast.com/feed/FAKE_SENTINEL.rss";
const document = {
  description: "Your private feed: https://priv3.supercast.com./feed/FAKE_SENTINEL.rss",
};
redactPrivateFeedAddresses(
  document,
  new Map([[known, "podnotes-private-feed:Paid"]]),
);

Expected the quoted address to become podnotes-private-feed:Paid. Actual output is the unchanged document, including the fake subscriber token. These are synthetic fixture addresses, not subscriber credentials.

The persistence encoder uses this helper to scrub known private feed addresses from arbitrary strings and unknown fields. Check terminal-dot canonicalization there while preserving distinct episode and signed-media URLs. Add behavior tests for quoted and standalone aliases, then run the privacy and persistence e2e suites.

Found during the PERF3 startup investigation. Kept separate because PERF3 preserves the existing regex and privacy behavior exactly.

Activity

  1. chhoumann commented on Oct 13, 2026

    @chhoumann
    OwnerAuthor

    Related alias found by the PR #444 verification (V-444 fuzz set, identical on master): a quoted address that uses backslashes after the scheme (https:\\\\host/...) keeps its secret through redaction. These were the only aliases in a 15,000-document fuzz set that kept their secret. Fold it into the same fix. Also worth pinning with a test row: https:///%70rivate.example.com/... (V-444 showed dropping the / and \\ from the numeric class, or the userinfo group, still passes the current tests).

  2. chhoumann commented on Oct 13, 2026

    @chhoumann
    OwnerAuthor

    Fixed by #454 (merged 48e1d50): nothing PodNotes writes into the vault contains a private feed address. Verified live on Obsidian 1.14.4 in the #454 verification (V-454), with a sentinel in every field and template tag. Remaining alias classes and entity-escaped copies in data.json are tracked separately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions