diff options
| author | JPVenson <github@jpb.email> | 2025-09-12 21:58:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-12 13:58:16 -0600 |
| commit | c02a24e32a7c4ffc4f00620d53911d044b26c9cc (patch) | |
| tree | c821c817a56b4718f6fce4759513dc979d15754e /MediaBrowser.Controller/Entities/Video.cs | |
| parent | deee04ae38cf057938f37c1dd7a98d20cf5b65f3 (diff) | |
Fix several Stackoverflows (#14783)
Diffstat (limited to 'MediaBrowser.Controller/Entities/Video.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Video.cs | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 04f47b729..1043029c6 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -152,16 +152,7 @@ namespace MediaBrowser.Controller.Entities { get { - if (!string.IsNullOrEmpty(PrimaryVersionId)) - { - var item = LibraryManager.GetItemById(PrimaryVersionId); - if (item is Video video) - { - return video.MediaSourceCount; - } - } - - return LinkedAlternateVersions.Length + LocalAlternateVersions.Length + 1; + return GetMediaSourceCount(); } } @@ -259,6 +250,27 @@ namespace MediaBrowser.Controller.Entities [JsonIgnore] public override MediaType MediaType => MediaType.Video; + private int GetMediaSourceCount(HashSet<Guid> callstack = null) + { + callstack ??= new(); + if (!string.IsNullOrEmpty(PrimaryVersionId)) + { + var item = LibraryManager.GetItemById(PrimaryVersionId); + if (item is Video video) + { + if (callstack.Contains(video.Id)) + { + return video.LinkedAlternateVersions.Length + video.LocalAlternateVersions.Length + 1; + } + + callstack.Add(video.Id); + return video.GetMediaSourceCount(callstack); + } + } + + return LinkedAlternateVersions.Length + LocalAlternateVersions.Length + 1; + } + public override List<string> GetUserDataKeys() { var list = base.GetUserDataKeys(); |
