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
- Inspect <guid> values across items in the raw feed for duplicates.
- If guids are legitimately missing, ensure the parser derives a stable unique guid (e.g. from enclosure url+length).
- Report the duplicate-guid bug to the tracker operator.
- 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
- Inspect raw <guid> values for duplicates before enabling a preset.
- If guids are absent, synthesize a stable unique id (url+length hash).
- Report duplicate-guid bugs to the tracker operator.
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
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Feed contains releases without title.
- Failed to find a valid download url in the feed.
- Feed doesn't contain the release content size.
- Size of one more releases lower than {0}, feed must contain
- Could not parse feed from {0}
AI-assisted analysis of Sonarr/Sonarr@da2284d7ea (2026-08-13).
Data as JSON: /api/errors/b230c8c7208c1cd9.
Report an issue: GitHub.