Skip to content

Commit 4da50cd

Browse files
Copilotet1975
andauthored
Address PR #2019 review feedback on V3 packageContent URL selection
Co-authored-by: et1975 <623703+et1975@users.noreply.github.com>
1 parent 66aecec commit 4da50cd

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/code/PSResourceInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2030,7 +2030,7 @@ public static string SelectV3PackageContentUrl(
20302030
{
20312031
if (!NuGetVersion.TryParse(version, out NuGetVersion requiredVersion))
20322032
{
2033-
throw new PSArgumentException($"Version {version} is not a valid NuGet version.");
2033+
throw new PSArgumentException($"Version '{version}' is not a valid NuGet version.");
20342034
}
20352035

20362036
return Cmdlets.V3ServerAPICalls.GetPackageContentUrlForVersion(versionedResponses, requiredVersion);

src/code/V3ServerAPICalls.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,6 +1092,12 @@ private static bool PackageContentUrlMatchesVersion(string packageContentUrl, Nu
10921092
continue;
10931093
}
10941094

1095+
string queryKey = UnescapeUrlPart(queryParameter.Substring(0, separatorIndex)).Trim();
1096+
if (!queryKey.EndsWith("version", StringComparison.OrdinalIgnoreCase))
1097+
{
1098+
continue;
1099+
}
1100+
10951101
string queryValue = UnescapeUrlPart(queryParameter.Substring(separatorIndex + 1));
10961102
if (NuGetVersion.TryParse(queryValue, out NuGetVersion queryVersion) && queryVersion == requiredVersion)
10971103
{
@@ -1112,6 +1118,10 @@ private static string UnescapeUrlPart(string urlPart)
11121118
{
11131119
return urlPart;
11141120
}
1121+
catch (ArgumentException)
1122+
{
1123+
return urlPart;
1124+
}
11151125
}
11161126

11171127
/// <summary>

test/InstallPSResourceTests/InstallPSResourceV3ServerVersionSelection.Tests.ps1

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Describe 'Test V3 packageContent url selection for a required version' -tags 'CI
1919
$url | Should -BeExactly "$packageBaseAddress/1.2.3/test_module.1.2.3.nupkg"
2020
}
2121

22-
It 'Should not select the url of a version which the requested version is a prefix of' {
22+
It 'Should select the url for a version which another version is a prefix of' {
2323
$url = [Microsoft.PowerShell.PSResourceGet.UtilClasses.TestHooks]::SelectV3PackageContentUrl($versionedResponses, '1.2.30')
2424
$url | Should -BeExactly "$packageBaseAddress/1.2.30/test_module.1.2.30.nupkg"
2525
}
@@ -51,6 +51,15 @@ Describe 'Test V3 packageContent url selection for a required version' -tags 'CI
5151
$url | Should -BeExactly "https://www.myget.org/api/download?packageId=test_module&packageVersion=1.2.3"
5252
}
5353

54+
It 'Should not select a url where a non-version query parameter matches the version' {
55+
$responses = @(
56+
"https://www.myget.org/api/download?packageId=1.2.3&packageVersion=1.2.30",
57+
"https://www.myget.org/api/download?packageId=test_module&packageVersion=1.2.3"
58+
)
59+
$url = [Microsoft.PowerShell.PSResourceGet.UtilClasses.TestHooks]::SelectV3PackageContentUrl($responses, '1.2.3')
60+
$url | Should -BeExactly "https://www.myget.org/api/download?packageId=test_module&packageVersion=1.2.3"
61+
}
62+
5463
It 'Should not select any url when the requested version is not present' {
5564
$url = [Microsoft.PowerShell.PSResourceGet.UtilClasses.TestHooks]::SelectV3PackageContentUrl($versionedResponses, '1.2.4')
5665
$url | Should -BeNullOrEmpty

0 commit comments

Comments
 (0)