Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/libraries/System.Reflection.Emit/tests/AssemblyBuilderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Xunit;

Expand All @@ -23,6 +24,21 @@ public class IntClassAttribute : Attribute

public class AssemblyTests
{
// The ECMA replacement key for the Microsoft implementation of the CLR.
private static readonly byte[] TheKey =
{
0x00,0x24,0x00,0x00,0x04,0x80,0x00,0x00,0x94,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
0x00,0x24,0x00,0x00,0x52,0x53,0x41,0x31,0x00,0x04,0x00,0x00,0x01,0x00,0x01,0x00,
0x07,0xd1,0xfa,0x57,0xc4,0xae,0xd9,0xf0,0xa3,0x2e,0x84,0xaa,0x0f,0xae,0xfd,0x0d,
0xe9,0xe8,0xfd,0x6a,0xec,0x8f,0x87,0xfb,0x03,0x76,0x6c,0x83,0x4c,0x99,0x92,0x1e,
0xb2,0x3b,0xe7,0x9a,0xd9,0xd5,0xdc,0xc1,0xdd,0x9a,0xd2,0x36,0x13,0x21,0x02,0x90,
0x0b,0x72,0x3c,0xf9,0x80,0x95,0x7f,0xc4,0xe1,0x77,0x10,0x8f,0xc6,0x07,0x77,0x4f,
0x29,0xe8,0x32,0x0e,0x92,0xea,0x05,0xec,0xe4,0xe8,0x21,0xc0,0xa5,0xef,0xe8,0xf1,
0x64,0x5c,0x4c,0x0c,0x93,0xc1,0xab,0x99,0x28,0x5d,0x62,0x2c,0xaa,0x65,0x2c,0x1d,
0xfa,0xd6,0x3d,0x74,0x5d,0x6f,0x2d,0xe5,0xf1,0x7e,0x5e,0xaf,0x0f,0xc4,0x96,0x3d,
0x26,0x1c,0x8a,0x12,0x43,0x65,0x18,0x20,0x6d,0xc0,0x93,0x34,0x4d,0x5a,0xd2,0x93
};

public static IEnumerable<object[]> DefineDynamicAssembly_TestData()
{
foreach (AssemblyBuilderAccess access in new AssemblyBuilderAccess[] { AssemblyBuilderAccess.Run, AssemblyBuilderAccess.RunAndCollect })
Expand All @@ -31,6 +47,11 @@ public static IEnumerable<object[]> DefineDynamicAssembly_TestData()
yield return new object[] { new AssemblyName("testname") { Version = new Version(1, 2, 3, 4) }, access };
yield return new object[] { new AssemblyName("class") { Version = new Version(0, 0, 0, 0) }, access };
yield return new object[] { new AssemblyName("\uD800\uDC00") { Version = new Version(0, 0, 0, 0) }, access };

AssemblyName testPublicKey = new AssemblyName("TestPublicKey") { Version = new Version(0, 0, 0, 0) };
testPublicKey.CultureInfo = CultureInfo.InvariantCulture;
testPublicKey.SetPublicKey(TheKey);
yield return new object[] { testPublicKey, access };
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ public sealed partial class AssemblyBuilder : Assembly
private CustomAttributeBuilder[]? cattrs;
private string? version;
private string? culture;
private byte[]? public_key_token;
private Module[]? loaded_modules;
private uint access;
#endregion
Expand Down Expand Up @@ -221,6 +222,7 @@ private AssemblyBuilder(AssemblyName n, AssemblyBuilderAccess access)
{
version = v.ToString();
}
public_key_token = n.GetPublicKeyToken();

basic_init(this);

Expand Down
1 change: 1 addition & 0 deletions src/mono/mono/metadata/object-internals.h
Original file line number Diff line number Diff line change
Expand Up @@ -1062,6 +1062,7 @@ typedef struct {
MonoArray *cattrs;
MonoString *version;
MonoString *culture;
MonoArray *public_key_token;
MonoArray *loaded_modules;
guint32 access;
} MonoReflectionAssemblyBuilder;
Expand Down
7 changes: 7 additions & 0 deletions src/mono/mono/metadata/sre.c
Original file line number Diff line number Diff line change
Expand Up @@ -1261,6 +1261,13 @@ mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, M
assembly->assembly.aname.revision = 0;
}

if (assemblyb->public_key_token) {
for (int i = 0; i < 8 && i < mono_array_length_internal (assemblyb->public_key_token); i++) {
guint8 byte = mono_array_get_internal (assemblyb->public_key_token, guint8, i);
sprintf ((char*)(assembly->assembly.aname.public_key_token + 2 * i), "%02x", byte);
}
}

/* SRE assemblies are loaded into the individual loading context, ie,
* they only fire AssemblyResolve events, they don't cause probing for
* referenced assemblies to happen. */
Expand Down