From fdbfb0500ca00c16f9b2515c6ced4f49cffcf3d4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 00:49:36 +0000 Subject: [PATCH 1/2] Initial plan From 964c6990f035fd59c852dc7085cfb826b130ab8a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 00:53:37 +0000 Subject: [PATCH 2/2] Add null validation to PathHelpers.SafePathCombine to match TemplateDotNetTool Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- src/DemaConsulting.VersionMark/PathHelpers.cs | 4 +++ .../PathHelpersTests.cs | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/DemaConsulting.VersionMark/PathHelpers.cs b/src/DemaConsulting.VersionMark/PathHelpers.cs index 0791cfc..cec6128 100644 --- a/src/DemaConsulting.VersionMark/PathHelpers.cs +++ b/src/DemaConsulting.VersionMark/PathHelpers.cs @@ -34,6 +34,10 @@ internal static class PathHelpers /// Thrown when relativePath contains invalid characters or path traversal sequences. internal static string SafePathCombine(string basePath, string relativePath) { + // Validate inputs + ArgumentNullException.ThrowIfNull(basePath); + ArgumentNullException.ThrowIfNull(relativePath); + // Ensure the relative path doesn't contain path traversal sequences if (relativePath.Contains("..") || Path.IsPathRooted(relativePath)) { diff --git a/test/DemaConsulting.VersionMark.Tests/PathHelpersTests.cs b/test/DemaConsulting.VersionMark.Tests/PathHelpersTests.cs index 9c882b0..f3ab7d0 100644 --- a/test/DemaConsulting.VersionMark.Tests/PathHelpersTests.cs +++ b/test/DemaConsulting.VersionMark.Tests/PathHelpersTests.cs @@ -26,6 +26,36 @@ namespace DemaConsulting.VersionMark.Tests; [TestClass] public class PathHelpersTests { + /// + /// Test that SafePathCombine throws ArgumentNullException when basePath is null. + /// + [TestMethod] + public void PathHelpers_SafePathCombine_NullBasePath_ThrowsArgumentNullException() + { + // Arrange + string? basePath = null; + var relativePath = "subfolder/file.txt"; + + // Act & Assert + Assert.Throws(() => + PathHelpers.SafePathCombine(basePath!, relativePath)); + } + + /// + /// Test that SafePathCombine throws ArgumentNullException when relativePath is null. + /// + [TestMethod] + public void PathHelpers_SafePathCombine_NullRelativePath_ThrowsArgumentNullException() + { + // Arrange + var basePath = "/home/user/project"; + string? relativePath = null; + + // Act & Assert + Assert.Throws(() => + PathHelpers.SafePathCombine(basePath, relativePath!)); + } + /// /// Test that SafePathCombine correctly combines valid paths. ///