Sonarr/Sonarr · error · UnsupportedFeedException

Feed contains releases with same guid, rejecting malformed r

Error message

Feed contains releases with same guid, rejecting malformed rss feed.

What it means

Thrown by ValidateReleases when release GUIDs contain duplicates. It collects all non-null Guid values, computes Distinct(), and rejects the feed if distinct.Length != total.Length. Duplicate GUIDs break dedup/history tracking and indicate a malformed or mis-paginated feed.

Source

Thrown at src/NzbDrone.Core/Indexers/TorrentRss/TorrentRssSettingsDetector.cs:281

            _logger.Trace("TorrentInfo: \n{0}", torrentInfo.ToString("L"));

            if (releases.Any(r => r.Title.IsNullOrWhiteSpace()))
            {
                throw new UnsupportedFeedException("Feed contains releases without title.");
            }

            if (releases.Any(r => !IsValidDownloadUrl(r.DownloadUrl)))
            {
                throw new UnsupportedFeedException("Failed to find a valid download url in the feed.");
            }

            var total = releases.Where(v => v.Guid != null).Select(v => v.Guid).ToArray();
            var distinct = total.Distinct().ToArray();

            if (distinct.Length != total.Length)
            {
                throw new UnsupportedFeedException("Feed contains releases with same guid, rejecting malformed rss feed.");
            }
        }

        private void ValidateReleaseSize(TorrentInfo[] releases, TorrentRssIndexerSettings indexerSettings)
        {
            if (!indexerSettings.AllowZeroSize && releases.Any(r => r.Size == 0))
            {
                throw new UnsupportedFeedException("Feed doesn't contain the release content size.");
            }

            if (releases.Any(r => r.Size != 0 && r.Size < ValidSizeThreshold))
            {
                throw new UnsupportedFeedException("Size of one more releases lower than {0}, feed must contain release content size.", ValidSizeThreshold.SizeSuffix());
            }
        }

        private static bool IsValidDownloadUrl(string url)
        {

View on GitHub (pinned to da2284d7ea)

Solutions

  1. Inspect <guid> values across items in the raw feed for duplicates.
  2. If guids are legitimately missing, ensure the parser derives a stable unique guid (e.g. from enclosure url+length).
  3. Report the duplicate-guid bug to the tracker operator.
  4. Switch to an alternate feed URL that does not duplicate items.
Defensive patterns

Strategy: validation

Validate before calling

var guids = releases.Where(r => r.Guid != null).Select(r => r.Guid).ToArray();
if (guids.Distinct().Count() != guids.Length) {
    _logger.Warn("Duplicate GUIDs detected; feed may be malformed or paginated wrongly");
}

Type guard

static bool GuidsAreUnique(IEnumerable<TorrentInfo> r) {
    var g = r.Where(x => x.Guid != null).Select(x => x.Guid).ToArray();
    return g.Distinct().Count() == g.Length;
}

Try / catch

try { detector.ValidateReleases(releases, settings); }
catch (UnsupportedFeedException ex) when (ex.Message.Contains("same guid")) {
    // report the tracker is emitting duplicate GUIDs; do not enable this preset
}

Prevention

When it happens

Trigger: Multiple <item> elements share the same <guid> (or permalink), or the parser falls back to a field that is identical across items (e.g. all empty then defaulted). Common when a feed repeats items across pages or uses the category as guid.

Common situations: Tracker serves duplicate items in one response (caching/pagination bug), guid is missing so the parser synthesizes the same placeholder, or the wrong field is mapped to Guid.

Understand the failure class

Related errors


AI-assisted analysis of Sonarr/Sonarr@da2284d7ea (2026-08-13). Data as JSON: /api/errors/b230c8c7208c1cd9. Report an issue: GitHub.