Browse Source

More strictly match color prefixes

pull/7993/head
robloo 5 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> /// </summary>
private static bool TryParseCssFormat(string s, out Color color) private static bool TryParseCssFormat(string s, out Color color)
{ {
bool prefixMatched = false;
color = default; color = default;
if (s is null) if (s is null)
@ -359,13 +361,21 @@ namespace Avalonia.Media
workingString.EndsWith(")", StringComparison.Ordinal)) workingString.EndsWith(")", StringComparison.Ordinal))
{ {
workingString = workingString.Substring(5, workingString.Length - 6); 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.StartsWith("rgb(", StringComparison.OrdinalIgnoreCase) &&
workingString.EndsWith(")", StringComparison.Ordinal)) workingString.EndsWith(")", StringComparison.Ordinal))
{ {
workingString = workingString.Substring(4, workingString.Length - 5); workingString = workingString.Substring(4, workingString.Length - 5);
prefixMatched = true;
}
if (prefixMatched == false)
{
return false;
} }
string[] components = workingString.Split(','); 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> /// <returns>True if parsing was successful; otherwise, false.</returns>
public static bool TryParse(string s, out HslColor hslColor) public static bool TryParse(string s, out HslColor hslColor)
{ {
bool prefixMatched = false;
hslColor = default; hslColor = default;
if (s is null) if (s is null)
@ -279,15 +281,19 @@ namespace Avalonia.Media
workingString.EndsWith(")", StringComparison.Ordinal)) workingString.EndsWith(")", StringComparison.Ordinal))
{ {
workingString = workingString.Substring(5, workingString.Length - 6); 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.StartsWith("hsl(", StringComparison.OrdinalIgnoreCase) &&
workingString.EndsWith(")", StringComparison.Ordinal)) workingString.EndsWith(")", StringComparison.Ordinal))
{ {
workingString = workingString.Substring(4, workingString.Length - 5); workingString = workingString.Substring(4, workingString.Length - 5);
prefixMatched = true;
} }
else
if (prefixMatched == false)
{ {
return 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> /// <returns>True if parsing was successful; otherwise, false.</returns>
public static bool TryParse(string s, out HsvColor hsvColor) public static bool TryParse(string s, out HsvColor hsvColor)
{ {
bool prefixMatched = false;
hsvColor = default; hsvColor = default;
if (s is null) if (s is null)
@ -279,15 +281,19 @@ namespace Avalonia.Media
workingString.EndsWith(")", StringComparison.Ordinal)) workingString.EndsWith(")", StringComparison.Ordinal))
{ {
workingString = workingString.Substring(5, workingString.Length - 6); 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.StartsWith("hsv(", StringComparison.OrdinalIgnoreCase) &&
workingString.EndsWith(")", StringComparison.Ordinal)) workingString.EndsWith(")", StringComparison.Ordinal))
{ {
workingString = workingString.Substring(4, workingString.Length - 5); workingString = workingString.Substring(4, workingString.Length - 5);
prefixMatched = true;
} }
else
if (prefixMatched == false)
{ {
return false; return false;
} }

Loading…
Cancel
Save