diff --git a/src/Avalonia.Base/Media/Color.cs b/src/Avalonia.Base/Media/Color.cs
index 208e359f80..cb90404f6d 100644
--- a/src/Avalonia.Base/Media/Color.cs
+++ b/src/Avalonia.Base/Media/Color.cs
@@ -339,6 +339,8 @@ namespace Avalonia.Media
///
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(',');
diff --git a/src/Avalonia.Base/Media/HslColor.cs b/src/Avalonia.Base/Media/HslColor.cs
index cd98c72e3f..e8a4d6f94f 100644
--- a/src/Avalonia.Base/Media/HslColor.cs
+++ b/src/Avalonia.Base/Media/HslColor.cs
@@ -256,6 +256,8 @@ namespace Avalonia.Media
/// True if parsing was successful; otherwise, false.
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;
}
diff --git a/src/Avalonia.Base/Media/HsvColor.cs b/src/Avalonia.Base/Media/HsvColor.cs
index 1ef0bcc742..924ef4778b 100644
--- a/src/Avalonia.Base/Media/HsvColor.cs
+++ b/src/Avalonia.Base/Media/HsvColor.cs
@@ -256,6 +256,8 @@ namespace Avalonia.Media
/// True if parsing was successful; otherwise, false.
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;
}