From 63fb71d4917839b940e23ff1323f70d6570ddd8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20S=C3=A4llerg=C3=A5rd?= Date: Mon, 4 Dec 2023 23:21:49 +0100 Subject: [PATCH 1/2] Update tests to run .NET 8 --- .../McMaster.Extensions.CommandLineUtils.Tests.csproj | 2 +- .../McMaster.Extensions.Hosting.CommandLine.Tests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj index 86a48b14..a04e46db 100644 --- a/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj +++ b/test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj @@ -1,7 +1,7 @@  - net7.0;net6.0 + net8.0;net7.0;net6.0 $(TargetFrameworks);net472 annotations diff --git a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj index b1820d12..8760e52a 100644 --- a/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj +++ b/test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj @@ -1,7 +1,7 @@  - net7.0;net6.0 + net8.0;net7.0;net6.0 $(TargetFrameworks);net472 From b177f5265df271a7cbb995a06ac54947b14b0d2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20S=C3=A4llerg=C3=A5rd?= Date: Mon, 4 Dec 2023 23:22:39 +0100 Subject: [PATCH 2/2] Don't call enumerator.Current if MoveNext is not called or returns false in CommandArgumentEnumerator. --- src/CommandLineUtils/Internal/CommandLineProcessor.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/CommandLineUtils/Internal/CommandLineProcessor.cs b/src/CommandLineUtils/Internal/CommandLineProcessor.cs index 5a515784..4efa9701 100644 --- a/src/CommandLineUtils/Internal/CommandLineProcessor.cs +++ b/src/CommandLineUtils/Internal/CommandLineProcessor.cs @@ -519,10 +519,12 @@ public void Dispose() private sealed class CommandArgumentEnumerator : IEnumerator { private readonly IEnumerator _enumerator; + private bool _currentValid; public CommandArgumentEnumerator(IEnumerator enumerator) { _enumerator = enumerator; + _currentValid = false; } public CommandArgument Current => _enumerator.Current; @@ -533,9 +535,10 @@ public CommandArgumentEnumerator(IEnumerator enumerator) public bool MoveNext() { - if (Current == null || !Current.MultipleValues) + if (!_currentValid || !Current.MultipleValues) { - return _enumerator.MoveNext(); + _currentValid = _enumerator.MoveNext(); + return _currentValid; } // If current argument allows multiple values, we don't move forward and