From c1f10b21b360c65b2e21133214969fcf547a688b Mon Sep 17 00:00:00 2001 From: goat Date: Wed, 14 Jun 2023 20:46:00 +0200 Subject: [PATCH] fix: correctly handle plugins with invalid Name,InternalName,AssemblyVersion --- .../PluginInstaller/PluginInstallerWindow.cs | 4 +-- .../Plugin/Internal/Types/PluginRepository.cs | 27 ++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs index fb7714098..33b80cf93 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs @@ -2862,8 +2862,8 @@ internal class PluginInstallerWindow : Window, IDisposable return true; return hasSearchString && !( - manifest.Name.ToLowerInvariant().Contains(searchString) || - manifest.InternalName.ToLowerInvariant().Contains(searchString) || + (!manifest.Name.IsNullOrEmpty() && manifest.Name.ToLowerInvariant().Contains(searchString)) || + (!manifest.InternalName.IsNullOrEmpty() && manifest.InternalName.ToLowerInvariant().Contains(searchString)) || (!manifest.Author.IsNullOrEmpty() && manifest.Author.Equals(this.searchText, StringComparison.InvariantCultureIgnoreCase)) || (!manifest.Punchline.IsNullOrEmpty() && manifest.Punchline.ToLowerInvariant().Contains(searchString)) || (manifest.Tags != null && manifest.Tags.Any(tag => tag.ToLowerInvariant().Contains(searchString)))); diff --git a/Dalamud/Plugin/Internal/Types/PluginRepository.cs b/Dalamud/Plugin/Internal/Types/PluginRepository.cs index 25189aadd..b51a3355c 100644 --- a/Dalamud/Plugin/Internal/Types/PluginRepository.cs +++ b/Dalamud/Plugin/Internal/Types/PluginRepository.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Dalamud.Logging.Internal; using Dalamud.Networking.Http; +using Dalamud.Utility; using Newtonsoft.Json; namespace Dalamud.Plugin.Internal.Types; @@ -145,7 +146,7 @@ internal class PluginRepository return; } - this.PluginMaster = pluginMaster.AsReadOnly(); + this.PluginMaster = pluginMaster.Where(this.IsValidManifest).ToList().AsReadOnly(); Log.Information($"Successfully fetched repo: {this.PluginMasterUrl}"); this.State = PluginRepositoryState.Success; @@ -156,4 +157,28 @@ internal class PluginRepository this.State = PluginRepositoryState.Fail; } } + + private bool IsValidManifest(RemotePluginManifest manifest) + { + if (manifest.InternalName.IsNullOrWhitespace()) + { + Log.Error("Repository at {RepoLink} has a plugin with an invalid InternalName.", this.PluginMasterUrl); + return false; + } + + if (manifest.Name.IsNullOrWhitespace()) + { + Log.Error("Plugin {PluginName} in {RepoLink} has an invalid Name.", manifest.InternalName, this.PluginMasterUrl); + return false; + } + + // ReSharper disable once ConditionIsAlwaysTrueOrFalse + if (manifest.AssemblyVersion == null) + { + Log.Error("Plugin {PluginName} in {RepoLink} has an invalid AssemblyVersion.", manifest.InternalName, this.PluginMasterUrl); + return false; + } + + return true; + } }