Add support to web cmdlets for open-ended input tags (#16193)

This commit is contained in:
Austin Farmer
2021-11-02 09:39:28 -07:00
committed by GitHub
parent 53f8cba46f
commit 107fd7ab1f
2 changed files with 43 additions and 1 deletions
@@ -219,7 +219,7 @@ namespace Microsoft.PowerShell.Commands
if (s_inputFieldRegex == null)
{
s_inputFieldRegex = new Regex(@"<input\s+[^>]*(/>|>.*?</input>)",
s_inputFieldRegex = new Regex(@"<input\s+[^>]*(/?>|>.*?</input>)",
RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
}
@@ -1933,6 +1933,48 @@ Describe "Invoke-WebRequest tests" -Tags "Feature", "RequireAdminOnWindows" {
$response = Invoke-WebRequest -Uri $dosUri
$response.Images | Should -Not -BeNullOrEmpty
}
$singleInputExpected = @(
@{ Name = 'foo'; Value = 'bar' }
)
It 'correctly parses input tag(s) for `<markup>`' -TestCases @(
@{
Markup = "<input name='foo' value='bar'>";
ExpectedFields = $singleInputExpected
},
@{
Markup = "<input name='foo' value='bar'/>";
ExpectedFields = $singleInputExpected
},
@{
Markup = "<input name='foo' value='bar'>baz</input>";
ExpectedFields = $singleInputExpected
}
@{
Markup = "<input name='item1' value='bar'><input name='item2' value='foo'><input name='item3'></input><input name='item4' value='fu'><input name='item5' value='bahr'/>";
ExpectedFields = @(
@{ Name = 'item1'; Value = 'bar'},
@{ Name = 'item2'; Value = 'foo' },
@{ Name = 'item3'; Value = $null },
@{ Name = 'item4'; Value = 'fu' },
@{ Name = 'item5'; Value = 'bahr' }
)
}
) {
param($markup, $expectedFields)
$query = @{
contenttype = 'text/html'
body = "<html><body>${markup}</body></html>"
}
$uri = Get-WebListenerUrl -Test 'Response' -Query $query
$response = Invoke-WebRequest -Uri $uri -UseBasicParsing
$response.Error | Should -BeNullOrEmpty
ForEach ($expectedField in $expectedFields) {
$actualField = $response.InputFields.FindByName($expectedField.Name)
$actualField.Value | Should -Be $expectedField.Value
}
}
}
Context "Denial of service" -Tag 'DOS' {