mirror of
https://github.com/actions/runner.git
synced 2025-12-12 14:17:46 +00:00
Replace '(' and ')' with '[' and '] from OS.Description so it doesn't fail User-Agent header validation (#2288)
* Sanitize OS Desc for UserAgents * Only drop brackets if needed, refactoring * Add missing ')' * Readd missing brackets around '(header)' * Add comments * Use bracket solution from SDK * Rename tests
This commit is contained in:
@@ -73,7 +73,7 @@ namespace GitHub.Runner.Sdk
|
|||||||
{
|
{
|
||||||
var headerValues = new List<ProductInfoHeaderValue>();
|
var headerValues = new List<ProductInfoHeaderValue>();
|
||||||
headerValues.Add(new ProductInfoHeaderValue($"GitHubActionsRunner-Plugin", BuildConstants.RunnerPackage.Version));
|
headerValues.Add(new ProductInfoHeaderValue($"GitHubActionsRunner-Plugin", BuildConstants.RunnerPackage.Version));
|
||||||
headerValues.Add(new ProductInfoHeaderValue($"({RuntimeInformation.OSDescription.Trim()})"));
|
headerValues.Add(new ProductInfoHeaderValue($"({StringUtil.SanitizeUserAgentHeader(RuntimeInformation.OSDescription)})"));
|
||||||
|
|
||||||
if (VssClientHttpRequestSettings.Default.UserAgent != null && VssClientHttpRequestSettings.Default.UserAgent.Count > 0)
|
if (VssClientHttpRequestSettings.Default.UserAgent != null && VssClientHttpRequestSettings.Default.UserAgent.Count > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -123,5 +123,12 @@ namespace GitHub.Runner.Sdk
|
|||||||
{
|
{
|
||||||
return value?.Substring(0, Math.Min(value.Length, count));
|
return value?.Substring(0, Math.Min(value.Length, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes format violations e.g. https://github.com/actions/runner/issues/2165
|
||||||
|
public static string SanitizeUserAgentHeader(string header)
|
||||||
|
{
|
||||||
|
return header.Replace("(", "[").Replace(")", "]").Trim();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace GitHub.Runner.Sdk
|
|||||||
{
|
{
|
||||||
var headerValues = new List<ProductInfoHeaderValue>();
|
var headerValues = new List<ProductInfoHeaderValue>();
|
||||||
headerValues.AddRange(additionalUserAgents);
|
headerValues.AddRange(additionalUserAgents);
|
||||||
headerValues.Add(new ProductInfoHeaderValue($"({RuntimeInformation.OSDescription.Trim()})"));
|
headerValues.Add(new ProductInfoHeaderValue($"({StringUtil.SanitizeUserAgentHeader(RuntimeInformation.OSDescription)})"));
|
||||||
|
|
||||||
if (VssClientHttpRequestSettings.Default.UserAgent != null && VssClientHttpRequestSettings.Default.UserAgent.Count > 0)
|
if (VssClientHttpRequestSettings.Default.UserAgent != null && VssClientHttpRequestSettings.Default.UserAgent.Count > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using GitHub.Runner.Common.Util;
|
using GitHub.Runner.Sdk;
|
||||||
using GitHub.Runner.Sdk;
|
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
@@ -186,5 +185,19 @@ namespace GitHub.Runner.Common.Tests.Util
|
|||||||
Assert.False(result9, $"'{undefineString3}' should convert to false.");
|
Assert.False(result9, $"'{undefineString3}' should convert to false.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("", "")]
|
||||||
|
[InlineData("(())", "[[]]")]
|
||||||
|
[InlineData("()()", "[][]")]
|
||||||
|
[InlineData(" Liquorix kernel OS Description is poorly formatted (linux version ", "Liquorix kernel OS Description is poorly formatted [linux version")]
|
||||||
|
[InlineData("Liquorix kernel OS Description is poorly formatted (linux version", "Liquorix kernel OS Description is poorly formatted [linux version")]
|
||||||
|
[InlineData("()((.", "[][[.")]
|
||||||
|
[Trait("Level", "L0")]
|
||||||
|
[Trait("Category", "Common")]
|
||||||
|
public void SanitizeUserAgentHeader(string input, string expected)
|
||||||
|
{
|
||||||
|
Assert.Equal(expected, StringUtil.SanitizeUserAgentHeader(input));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user