From c98fcfea100c72e8483bef87b68fbd8ab859a486 Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Sat, 31 Jan 2026 23:21:53 +0900 Subject: [PATCH] Add null checks for path in API endpoint handlers Added null checks for the 'path' parameter in CanHandle methods across all API endpoint classes to prevent potential NullReferenceExceptions. Also made the _apis list in ResourceServer readonly and updated a comment for clarity. --- .../WelsonJS.Launcher/ApiEndpoints/ChromiumDevTools.cs | 2 +- .../WelsonJS.Launcher/ApiEndpoints/Completion.cs | 2 +- WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/DnsQuery.cs | 2 +- .../WelsonJS.Launcher/ApiEndpoints/ImageColorPicker.cs | 2 +- WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/IpQuery.cs | 2 +- WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Settings.cs | 2 +- .../WelsonJS.Launcher/ApiEndpoints/TwoFactorAuth.cs | 2 +- WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Whois.cs | 2 +- WelsonJS.Augmented/WelsonJS.Launcher/ResourceServer.cs | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ChromiumDevTools.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ChromiumDevTools.cs index a12ceb4..551ffd2 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ChromiumDevTools.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ChromiumDevTools.cs @@ -31,7 +31,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Completion.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Completion.cs index ad305fc..f8cc1e0 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Completion.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Completion.cs @@ -40,7 +40,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/DnsQuery.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/DnsQuery.cs index 92add71..257617a 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/DnsQuery.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/DnsQuery.cs @@ -38,7 +38,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ImageColorPicker.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ImageColorPicker.cs index 4c44d8f..f5d6433 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ImageColorPicker.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/ImageColorPicker.cs @@ -47,7 +47,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/IpQuery.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/IpQuery.cs index e6e2892..c97cd1d 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/IpQuery.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/IpQuery.cs @@ -44,7 +44,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) { diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Settings.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Settings.cs index 649f4cb..3c969d4 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Settings.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Settings.cs @@ -34,7 +34,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.Equals(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.Equals(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/TwoFactorAuth.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/TwoFactorAuth.cs index d6e1930..1888242 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/TwoFactorAuth.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/TwoFactorAuth.cs @@ -35,7 +35,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Whois.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Whois.cs index 3338e3d..a94cfa9 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Whois.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ApiEndpoints/Whois.cs @@ -29,7 +29,7 @@ namespace WelsonJS.Launcher.ResourceTools public bool CanHandle(HttpListenerContext context, string path) { - return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); + return path != null && path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase); } public async Task HandleAsync(HttpListenerContext context, string path) diff --git a/WelsonJS.Augmented/WelsonJS.Launcher/ResourceServer.cs b/WelsonJS.Augmented/WelsonJS.Launcher/ResourceServer.cs index ef6ae6d..ea66baa 100644 --- a/WelsonJS.Augmented/WelsonJS.Launcher/ResourceServer.cs +++ b/WelsonJS.Augmented/WelsonJS.Launcher/ResourceServer.cs @@ -31,7 +31,7 @@ namespace WelsonJS.Launcher private bool _isRunning; private string _prefix; private string _resourceName; - private List _apis = new List(); + private readonly List _apis = new List(); private BlobConfig _blobConfig; private readonly ILog _logger; @@ -151,7 +151,7 @@ namespace WelsonJS.Launcher return; } - // Serve from a resource tool + // Serve via API endpoints foreach (var api in _apis) { if (api.CanHandle(context, path))