From cce840e7f587ff8fb177eb126c2e5b3ed7b1a82c Mon Sep 17 00:00:00 2001 From: mkelvers Date: Tue, 26 May 2026 22:25:22 +0200 Subject: [PATCH] fix: harden subtitle cache --- internal/playback/handler/subtitle_cache.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/internal/playback/handler/subtitle_cache.go b/internal/playback/handler/subtitle_cache.go index 7cf0d97..d2deb89 100644 --- a/internal/playback/handler/subtitle_cache.go +++ b/internal/playback/handler/subtitle_cache.go @@ -47,7 +47,11 @@ func (c *subtitleCache) Get(key string, now time.Time) (data []byte, contentType if el == nil { return nil, "", false } - entry := el.Value.(subtitleCacheEntry) + entry, ok := el.Value.(subtitleCacheEntry) + if !ok { + c.removeElement(el) + return nil, "", false + } if !entry.expiresAt.IsZero() && now.After(entry.expiresAt) { c.removeElement(el) return nil, "", false @@ -61,7 +65,11 @@ func (c *subtitleCache) Set(key string, data []byte, contentType string, now tim defer c.mu.Unlock() if el := c.entries[key]; el != nil { - entry := el.Value.(subtitleCacheEntry) + entry, ok := el.Value.(subtitleCacheEntry) + if !ok { + c.removeElement(el) + return + } entry.data = data entry.contentType = contentType entry.expiresAt = now.Add(c.ttl) @@ -89,7 +97,11 @@ func (c *subtitleCache) Set(key string, data []byte, contentType string, now tim } func (c *subtitleCache) removeElement(el *list.Element) { - entry := el.Value.(subtitleCacheEntry) + entry, ok := el.Value.(subtitleCacheEntry) + if !ok { + c.lru.Remove(el) + return + } delete(c.entries, entry.key) c.lru.Remove(el) }