Browse Source

More strictly match color prefixes

pull/7993/head
robloo 4 years ago
parent
commit
a7dc94b3cd
  1. 12
      src/Avalonia.Base/Media/Color.cs
  2. 10
      src/Avalonia.Base/Media/HslColor.cs
  3. 10
      src/Avalonia.Base/Media/HsvColor.cs

12
src/Avalonia.Base/Media/Color.cs

@ -339,6 +339,8 @@ namespace Avalonia.Media
/// </summary>
private static bool TryParseCssFormat(string s, out Color color)
{
bool prefixMatched = false;
color = default;
if (s is null)
@ -359,13 +361,21 @@ namespace Avalonia.Media
workingString.EndsWith(")", StringComparison.Ordinal))
{
workingString = workingString.Substring(5, workingString.Length - 6);
prefixMatched = true;
}
if (workingString.Length >= 10 &&
if (prefixMatched == false &&
workingString.Length >= 10 &&
workingString.StartsWith("rgb(", StringComparison.OrdinalIgnoreCase) &&
workingString.EndsWith(")", StringComparison.Ordinal))
{
workingString = workingString.Substring(4, workingString.Length - 5);
prefixMatched = true;
}
if (prefixMatched == false)
{
return false;
}
string[] components = workingString.Split(',');

10
src/Avalonia.Base/Media/HslColor.cs

@ -256,6 +256,8 @@ namespace Avalonia.Media
/// <returns>True if parsing was successful; otherwise, false.</returns>
public static bool TryParse(string s, out HslColor hslColor)
{
bool prefixMatched = false;
hslColor = default;
if (s is null)
@ -279,15 +281,19 @@ namespace Avalonia.Media
workingString.EndsWith(")", StringComparison.Ordinal))
{
workingString = workingString.Substring(5, workingString.Length - 6);
prefixMatched = true;
}
if (workingString.Length >= 10 &&
if (prefixMatched == false &&
workingString.Length >= 10 &&
workingString.StartsWith("hsl(", StringComparison.OrdinalIgnoreCase) &&
workingString.EndsWith(")", StringComparison.Ordinal))
{
workingString = workingString.Substring(4, workingString.Length - 5);
prefixMatched = true;
}
else
if (prefixMatched == false)
{
return false;
}

10
src/Avalonia.Base/Media/HsvColor.cs

@ -256,6 +256,8 @@ namespace Avalonia.Media
/// <returns>True if parsing was successful; otherwise, false.</returns>
public static bool TryParse(string s, out HsvColor hsvColor)
{
bool prefixMatched = false;
hsvColor = default;
if (s is null)
@ -279,15 +281,19 @@ namespace Avalonia.Media
workingString.EndsWith(")", StringComparison.Ordinal))
{
workingString = workingString.Substring(5, workingString.Length - 6);
prefixMatched = true;
}
if (workingString.Length >= 10 &&
if (prefixMatched == false &&
workingString.Length >= 10 &&
workingString.StartsWith("hsv(", StringComparison.OrdinalIgnoreCase) &&
workingString.EndsWith(")", StringComparison.Ordinal))
{
workingString = workingString.Substring(4, workingString.Length - 5);
prefixMatched = true;
}
else
if (prefixMatched == false)
{
return false;
}

Loading…
Cancel
Save