From 9669ac41c1c9ec6d81660378d20bf07ba5084182 Mon Sep 17 00:00:00 2001 From: vycdev2 Date: Sun, 9 Aug 2026 18:01:58 +0000 Subject: [PATCH 1/2] fix: restrict YouTube resolver subdomains --- Morpheus.Tests/YoutubeUtilsTests.cs | 1 + Utilities/YoutubeUtils.cs | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Morpheus.Tests/YoutubeUtilsTests.cs b/Morpheus.Tests/YoutubeUtilsTests.cs index 741975b..a30affe 100644 --- a/Morpheus.Tests/YoutubeUtilsTests.cs +++ b/Morpheus.Tests/YoutubeUtilsTests.cs @@ -11,6 +11,7 @@ public class YoutubeUtilsTests [InlineData("https://example.com/@channel")] [InlineData("http://127.0.0.1/private")] [InlineData("https://www.youtube.com.example.com/@channel")] + [InlineData("https://evil.youtube.com/@channel")] [InlineData("https://example.com/channel/UCabcdefghijklmnopqrstuv")] [InlineData("example.com/channel/UCabcdefghijklmnopqrstuv")] [InlineData("//example.com/channel/UCabcdefghijklmnopqrstuv")] diff --git a/Utilities/YoutubeUtils.cs b/Utilities/YoutubeUtils.cs index 350d7fb..3b7b429 100644 --- a/Utilities/YoutubeUtils.cs +++ b/Utilities/YoutubeUtils.cs @@ -142,7 +142,8 @@ public static partial class YoutubeUtils private static bool IsYoutubeHost(string host) => host.Equals("youtube.com", StringComparison.OrdinalIgnoreCase) || - host.EndsWith(".youtube.com", StringComparison.OrdinalIgnoreCase); + host.Equals("www.youtube.com", StringComparison.OrdinalIgnoreCase) || + host.Equals("m.youtube.com", StringComparison.OrdinalIgnoreCase); private static bool IsSupportedYoutubePath(string path) => path.StartsWith("/@", StringComparison.OrdinalIgnoreCase) || From 67563b95516585bff86c52162f84ab7c4585d137 Mon Sep 17 00:00:00 2001 From: vycdev Date: Mon, 10 Aug 2026 08:47:15 +0000 Subject: [PATCH 2/2] fix: allow YouTube Music channel URLs --- Morpheus.Tests/YoutubeUtilsTests.cs | 2 ++ Utilities/YoutubeUtils.cs | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Morpheus.Tests/YoutubeUtilsTests.cs b/Morpheus.Tests/YoutubeUtilsTests.cs index a30affe..309b32c 100644 --- a/Morpheus.Tests/YoutubeUtilsTests.cs +++ b/Morpheus.Tests/YoutubeUtilsTests.cs @@ -32,6 +32,7 @@ public async Task ResolveChannelIdAsync_DoesNotRequestNonYoutubeUrls(string inpu [InlineData("https://www.youtube.com/@channel", "/@channel", "")] [InlineData("youtube.com/user/channel", "/user/channel", "")] [InlineData("https://m.youtube.com/c/channel?feature=share", "/c/channel", "")] + [InlineData("https://music.youtube.com/@channel", "/@channel", "")] [InlineData("https://youtu.be/dQw4w9WgXcQ?si=tracking", "/watch", "?v=dQw4w9WgXcQ")] [InlineData("@channel", "/@channel", "")] public async Task ResolveChannelIdAsync_RequestsCanonicalYoutubeUrls( @@ -56,6 +57,7 @@ public async Task ResolveChannelIdAsync_RequestsCanonicalYoutubeUrls( [Theory] [InlineData("https://www.youtube.com/channel/UCabcdefghijklmnopqrstuv")] + [InlineData("https://music.youtube.com/channel/UCabcdefghijklmnopqrstuv")] [InlineData("youtube.com/channel/UCabcdefghijklmnopqrstuv")] [InlineData("/channel/UCabcdefghijklmnopqrstuv")] public async Task ResolveChannelIdAsync_ReturnsIdsFromYoutubeChannelPathsWithoutRequesting(string input) diff --git a/Utilities/YoutubeUtils.cs b/Utilities/YoutubeUtils.cs index 3b7b429..29ba744 100644 --- a/Utilities/YoutubeUtils.cs +++ b/Utilities/YoutubeUtils.cs @@ -143,7 +143,8 @@ public static partial class YoutubeUtils private static bool IsYoutubeHost(string host) => host.Equals("youtube.com", StringComparison.OrdinalIgnoreCase) || host.Equals("www.youtube.com", StringComparison.OrdinalIgnoreCase) || - host.Equals("m.youtube.com", StringComparison.OrdinalIgnoreCase); + host.Equals("m.youtube.com", StringComparison.OrdinalIgnoreCase) || + host.Equals("music.youtube.com", StringComparison.OrdinalIgnoreCase); private static bool IsSupportedYoutubePath(string path) => path.StartsWith("/@", StringComparison.OrdinalIgnoreCase) ||