From c4be8737139c12cda4dcbdb1ca6b2602e5b640b5 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 19 Sep 2025 15:09:18 -0700 Subject: [PATCH 1/2] Add None value to EventAttributes enum Introduced the None value to the EventAttributes enum to explicitly represent events with no attributes. This improves clarity and completeness of the enum definition. --- src/AsmResolver.PE/DotNet/Metadata/Tables/EventAttributes.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/AsmResolver.PE/DotNet/Metadata/Tables/EventAttributes.cs b/src/AsmResolver.PE/DotNet/Metadata/Tables/EventAttributes.cs index aa7e08f5b..aa456faff 100644 --- a/src/AsmResolver.PE/DotNet/Metadata/Tables/EventAttributes.cs +++ b/src/AsmResolver.PE/DotNet/Metadata/Tables/EventAttributes.cs @@ -8,6 +8,10 @@ namespace AsmResolver.PE.DotNet.Metadata.Tables [Flags] public enum EventAttributes : ushort { + /// + /// Specifies that the event has no attributes. + /// + None = 0x0000, /// /// Specifies that the event is using a special name. /// From f52eb62ac0f8fccb1b40c54d3ae41012d2179af9 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 19 Sep 2025 15:09:21 -0700 Subject: [PATCH 2/2] Add tests for EventDefinition attribute flags Added unit tests to verify EventDefinition correctly handles None, SpecialName, and RtSpecialName attributes, including IsSpecialName and IsRuntimeSpecialName properties. --- .../EventDefinitionTest.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/AsmResolver.DotNet.Tests/EventDefinitionTest.cs b/test/AsmResolver.DotNet.Tests/EventDefinitionTest.cs index e45e52b2c..1306fe580 100644 --- a/test/AsmResolver.DotNet.Tests/EventDefinitionTest.cs +++ b/test/AsmResolver.DotNet.Tests/EventDefinitionTest.cs @@ -16,6 +16,33 @@ public void ReadName() Assert.NotNull(@event); } + [Fact] + public void VerifyEventAttributes_None() + { + var @event = new EventDefinition("MyEvent"u8, EventAttributes.None, eventType: null); + Assert.Equal(EventAttributes.None, @event.Attributes); + Assert.False(@event.IsSpecialName); + Assert.False(@event.IsRuntimeSpecialName); + } + + [Fact] + public void VerifyEventAttributes_SpecialName() + { + var @event = new EventDefinition("MyEvent"u8, EventAttributes.SpecialName, eventType: null); + Assert.Equal(EventAttributes.SpecialName, @event.Attributes); + Assert.True(@event.IsSpecialName); + Assert.False(@event.IsRuntimeSpecialName); + } + + [Fact] + public void VerifyEventAttributes_RuntimeSpecialName() + { + var @event = new EventDefinition("MyEvent"u8, EventAttributes.RtSpecialName, eventType: null); + Assert.Equal(EventAttributes.RtSpecialName, @event.Attributes); + Assert.False(@event.IsSpecialName); + Assert.True(@event.IsRuntimeSpecialName); + } + [Theory] [InlineData(nameof(MultipleEvents.Event1), "System.EventHandler")] [InlineData(nameof(MultipleEvents.Event2), "System.AssemblyLoadEventHandler")]