From a56e5b3f9a147ada4e02b79003adc1816f6763ed Mon Sep 17 00:00:00 2001 From: Stevie Robinson Date: Thu, 22 May 2025 02:56:15 +0200 Subject: [PATCH] New: Don't allow remote path to start with space (cherry picked from commit 5ba3ff598770fdf9e5a53d490c8bcbdd6a59c4cc) Fixed validation for Remote Path Mapping (cherry picked from commit bf34b4309402ce529a8c04de70f44b28948761f4) --- .../RemotePathMappingController.cs | 13 +++++++++++-- .../RemotePathMappings/RemotePathMappingService.cs | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs b/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs index 33edddff3..fae5b2388 100644 --- a/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs +++ b/src/Lidarr.Api.V1/RemotePathMappings/RemotePathMappingController.cs @@ -4,6 +4,7 @@ using Lidarr.Http; using Lidarr.Http.REST; using Lidarr.Http.REST.Attributes; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Common.Extensions; using NzbDrone.Core.RemotePathMappings; using NzbDrone.Core.Validation.Paths; @@ -21,11 +22,19 @@ namespace Lidarr.Api.V1.RemotePathMappings _remotePathMappingService = remotePathMappingService; SharedValidator.RuleFor(c => c.Host) - .NotEmpty(); + .NotEmpty(); // We cannot use IsValidPath here, because it's a remote path, possibly other OS. SharedValidator.RuleFor(c => c.RemotePath) - .NotEmpty(); + .NotEmpty(); + + SharedValidator.RuleFor(c => c.RemotePath) + .Must(remotePath => remotePath.IsNotNullOrWhiteSpace() && !remotePath.StartsWith(" ")) + .WithMessage("Remote Path '{PropertyValue}' must not start with a space"); + + SharedValidator.RuleFor(c => c.RemotePath) + .Must(remotePath => remotePath.IsNotNullOrWhiteSpace() && !remotePath.EndsWith(" ")) + .WithMessage("Remote Path '{PropertyValue}' must not end with a space"); SharedValidator.RuleFor(c => c.LocalPath) .Cascade(CascadeMode.Stop) diff --git a/src/NzbDrone.Core/RemotePathMappings/RemotePathMappingService.cs b/src/NzbDrone.Core/RemotePathMappings/RemotePathMappingService.cs index b757db3f3..9ee8a0ad0 100644 --- a/src/NzbDrone.Core/RemotePathMappings/RemotePathMappingService.cs +++ b/src/NzbDrone.Core/RemotePathMappings/RemotePathMappingService.cs @@ -96,6 +96,11 @@ namespace NzbDrone.Core.RemotePathMappings throw new ArgumentException("Invalid Host"); } + if (mapping.RemotePath.StartsWith(" ")) + { + throw new ArgumentException("Remote Path must not start with a space"); + } + var remotePath = new OsPath(mapping.RemotePath); var localPath = new OsPath(mapping.LocalPath);