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.
///