From 0aa7a894ef37bdf8e5f43d908528f094cff8ddcb Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 2 Nov 2022 09:05:38 +0100 Subject: [PATCH] Validate priority for set/bind. --- src/Avalonia.Base/AvaloniaObject.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs index 053648c8b6..68c8f19f19 100644 --- a/src/Avalonia.Base/AvaloniaObject.cs +++ b/src/Avalonia.Base/AvaloniaObject.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Runtime.CompilerServices; using Avalonia.Data; using Avalonia.Diagnostics; using Avalonia.Logging; @@ -314,6 +315,7 @@ namespace Avalonia { _ = property ?? throw new ArgumentNullException(nameof(property)); VerifyAccess(); + ValidatePriority(priority); LogPropertySet(property, value, BindingPriority.LocalValue); @@ -378,6 +380,7 @@ namespace Avalonia property = property ?? throw new ArgumentNullException(nameof(property)); source = source ?? throw new ArgumentNullException(nameof(source)); VerifyAccess(); + ValidatePriority(priority); return _values.AddBinding(property, source, priority); } @@ -400,6 +403,7 @@ namespace Avalonia property = property ?? throw new ArgumentNullException(nameof(property)); source = source ?? throw new ArgumentNullException(nameof(source)); VerifyAccess(); + ValidatePriority(priority); return _values.AddBinding(property, source, priority); } @@ -422,6 +426,7 @@ namespace Avalonia property = property ?? throw new ArgumentNullException(nameof(property)); source = source ?? throw new ArgumentNullException(nameof(source)); VerifyAccess(); + ValidatePriority(priority); return _values.AddBinding(property, source, priority); } @@ -763,5 +768,17 @@ namespace Avalonia value, priority); } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ValidatePriority(BindingPriority priority) + { + if (priority < BindingPriority.Animation || priority >= BindingPriority.Inherited) + ThrowInvalidPriority(priority); + } + + private static void ThrowInvalidPriority(BindingPriority priority) + { + throw new ArgumentException($"Invalid priority ${priority}", nameof(priority)); + } } }