From 6f83af2f5d469d332fbf7787d2d68c53d600e52b Mon Sep 17 00:00:00 2001 From: Jamiras Date: Fri, 14 Nov 2025 17:19:52 -0700 Subject: [PATCH] prevent exception if complex value does not contain a measured clause --- .../Trigger/MeasuredRequirementExpression.cs | 3 ++- Source/Parser/ValueBuilder.cs | 6 ++++++ Tests/Parser/ValueBuilderTests.cs | 12 ++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Source/Parser/Expressions/Trigger/MeasuredRequirementExpression.cs b/Source/Parser/Expressions/Trigger/MeasuredRequirementExpression.cs index ba954843..3a56305f 100644 --- a/Source/Parser/Expressions/Trigger/MeasuredRequirementExpression.cs +++ b/Source/Parser/Expressions/Trigger/MeasuredRequirementExpression.cs @@ -207,7 +207,8 @@ internal static void EnsureHasMeasuredRequirement(List requirements } } - last.Type = RequirementType.Measured; + if (last != null) + last.Type = RequirementType.Measured; } } } diff --git a/Source/Parser/ValueBuilder.cs b/Source/Parser/ValueBuilder.cs index 8fe37d3a..80b4cc64 100644 --- a/Source/Parser/ValueBuilder.cs +++ b/Source/Parser/ValueBuilder.cs @@ -93,6 +93,12 @@ public static Value BuildValue(ExpressionBase expression, SerializationContext s // ensure there's a Measured condition MeasuredRequirementExpression.EnsureHasMeasuredRequirement(requirements); + if (!requirements.Any(r => r.IsMeasured)) + { + error = InconvertibleError(expression); + return null; + } + return new Value(new[] { requirements }); } diff --git a/Tests/Parser/ValueBuilderTests.cs b/Tests/Parser/ValueBuilderTests.cs index 07823057..42a0679c 100644 --- a/Tests/Parser/ValueBuilderTests.cs +++ b/Tests/Parser/ValueBuilderTests.cs @@ -175,5 +175,17 @@ public void TestMergeBits() var serialized = value.Serialize(new SerializationContext { MinimumVersion = Version._1_0 }); Assert.That(serialized, Is.EqualTo("M:0xK000001")); } + + [Test] + public void TestPauseWithoutMeasured() + { + string input = "disable_when(byte(0x1234) == 1)"; + var clause = TriggerExpressionTests.Parse(input); + + ErrorExpression error; + var value = ValueBuilder.BuildValue(clause, out error); + Assert.That(value, Is.Null); + ExpressionTests.AssertError(error, "Cannot create value from requirement"); + } } }