From a4301a0466b575d184ec9dea4988a1f49edbf18c Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Sat, 30 Dec 2023 16:54:45 +0200 Subject: [PATCH 1/3] [mono] Do not throw in AssemblyExtensions.TryGetRawMetadata. --- .../src/System/Reflection/Metadata/AssemblyExtensions.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs b/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs index 9c677baa4bda0a..7eafc1a560964e 100644 --- a/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs +++ b/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs @@ -8,6 +8,13 @@ namespace System.Reflection.Metadata public static class AssemblyExtensions { [CLSCompliant(false)] - public static unsafe bool TryGetRawMetadata(this Assembly assembly, out byte* blob, out int length) => throw new NotImplementedException(); + public static unsafe bool TryGetRawMetadata(this Assembly assembly, out byte* blob, out int length) + { + ArgumentNullException.ThrowIfNull(assembly); + + blob = null; + length = 0; + return false; + } } } From e243bdc67d60ecf8db9773900a85bb8f5992062b Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Sun, 11 Feb 2024 19:59:45 +0200 Subject: [PATCH 2/3] Add a test for `AssemblyExtensions.TryGetRawMetadata`. --- .../tests/AssemblyExtensionsTest.cs | 25 +++++++++++++++++++ .../tests/System.Runtime.Loader.Tests.csproj | 2 ++ 2 files changed, 27 insertions(+) create mode 100644 src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs diff --git a/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs new file mode 100644 index 00000000000000..0fde8bea7de7f4 --- /dev/null +++ b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Xunit; +using System.Reflection.Metadata; +using System.Reflection; + +namespace System.Runtime.Loader.Tests +{ + public unsafe class AssemblyExtensionsTest + { + [Fact] + public void TryGetRawMetadata() + { + bool supportsRawMetadata = PlatformDetection.IsNotMonoRuntime && PlatformDetection.IsNotNativeAot; + + Assembly assembly = typeof(AssemblyExtensionsTest).Assembly; + bool hasMetadata = assembly.TryGetRawMetadata(out byte* blob, out int length); + + Assert.Equal(supportsRawMetadata, hasMetadata); + Assert.Equal(supportsRawMetadata, blob != null); + Assert.Equal(supportsRawMetadata, length > 0); + } + } +} diff --git a/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj b/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj index 03138144a9db7b..d047aa0b74dc72 100644 --- a/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj +++ b/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj @@ -2,6 +2,7 @@ System.Runtime.Loader.Tests $(NetCoreAppCurrent) + true true true @@ -16,6 +17,7 @@ + From a990b2364d5918c7a447198fca5d5a67437e2580 Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Sat, 17 Feb 2024 15:13:21 +0200 Subject: [PATCH 3/3] Try to read the assembly metadata blob in the test. --- .../System.Runtime.Loader/tests/AssemblyExtensionsTest.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs index 0fde8bea7de7f4..71a4cb434583d1 100644 --- a/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs +++ b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs @@ -20,6 +20,13 @@ public void TryGetRawMetadata() Assert.Equal(supportsRawMetadata, hasMetadata); Assert.Equal(supportsRawMetadata, blob != null); Assert.Equal(supportsRawMetadata, length > 0); + + if (supportsRawMetadata) + { + var metadataReader = new MetadataReader(blob, length); + string assemblyName = metadataReader.GetString(metadataReader.GetAssemblyDefinition().Name); + Assert.Equal(assembly.GetName().Name, assemblyName); + } } } }