From b0b93f5e29237fca6ece940cbc3a1219c387d456 Mon Sep 17 00:00:00 2001 From: Jb Evain Date: Thu, 1 Jul 2021 13:29:07 -0700 Subject: Prevent an exception if a string local constant is invalid (#774) --- Mono.Cecil/AssemblyReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mono.Cecil/AssemblyReader.cs b/Mono.Cecil/AssemblyReader.cs index 9fdcf68..5cd3d17 100644 --- a/Mono.Cecil/AssemblyReader.cs +++ b/Mono.Cecil/AssemblyReader.cs @@ -3005,7 +3005,7 @@ namespace Mono.Cecil { object value; if (type.etype == ElementType.String) { - if (signature.buffer [signature.position] != 0xff) { + if (signature.CanReadMore () && signature.buffer [signature.position] != 0xff) { var bytes = signature.ReadBytes ((int) (signature.sig_length - (signature.position - signature.start))); value = Encoding.Unicode.GetString (bytes, 0, bytes.Length); } else -- cgit v1.2.3 From d820a5beca4104364178c61e1c59718fb228589e Mon Sep 17 00:00:00 2001 From: Jb Evain Date: Thu, 1 Jul 2021 14:52:04 -0700 Subject: Preserve LargeAwareAddress image flag (#775) --- Mono.Cecil.PE/Image.cs | 3 ++- Mono.Cecil.PE/ImageReader.cs | 3 ++- Mono.Cecil.PE/ImageWriter.cs | 12 +++++++++--- Mono.Cecil/ModuleDefinition.cs | 2 +- Test/Mono.Cecil.Tests/ImageReadTests.cs | 8 ++++++++ Test/Resources/assemblies/anycpu32bitpreferred.exe | Bin 0 -> 3584 bytes 6 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 Test/Resources/assemblies/anycpu32bitpreferred.exe diff --git a/Mono.Cecil.PE/Image.cs b/Mono.Cecil.PE/Image.cs index 1092061..97e69c0 100644 --- a/Mono.Cecil.PE/Image.cs +++ b/Mono.Cecil.PE/Image.cs @@ -25,9 +25,10 @@ namespace Mono.Cecil.PE { public string FileName; public ModuleKind Kind; + public uint Characteristics; public string RuntimeVersion; public TargetArchitecture Architecture; - public ModuleCharacteristics Characteristics; + public ModuleCharacteristics DllCharacteristics; public ushort LinkerVersion; public ushort SubSystemMajor; public ushort SubSystemMinor; diff --git a/Mono.Cecil.PE/ImageReader.cs b/Mono.Cecil.PE/ImageReader.cs index 84fdeb6..5358129 100644 --- a/Mono.Cecil.PE/ImageReader.cs +++ b/Mono.Cecil.PE/ImageReader.cs @@ -88,8 +88,9 @@ namespace Mono.Cecil.PE { ReadMetadata (); ReadDebugHeader (); + image.Characteristics = characteristics; image.Kind = GetModuleKind (characteristics, subsystem); - image.Characteristics = (ModuleCharacteristics) dll_characteristics; + image.DllCharacteristics = (ModuleCharacteristics) dll_characteristics; } TargetArchitecture ReadArchitecture () diff --git a/Mono.Cecil.PE/ImageWriter.cs b/Mono.Cecil.PE/ImageWriter.cs index 7e5e923..a8a3fa8 100644 --- a/Mono.Cecil.PE/ImageWriter.cs +++ b/Mono.Cecil.PE/ImageWriter.cs @@ -194,12 +194,18 @@ namespace Mono.Cecil.PE { WriteUInt32 (metadata.timestamp); WriteUInt32 (0); // PointerToSymbolTable WriteUInt32 (0); // NumberOfSymbols - WriteUInt16 (SizeOfOptionalHeader ()); // SizeOfOptionalHeader + WriteUInt16 (SizeOfOptionalHeader ()); // SizeOfOptionalHeader - // ExecutableImage | (pe64 ? 32BitsMachine : LargeAddressAware) - var characteristics = (ushort) (0x0002 | (!pe64 ? 0x0100 : 0x0020)); + const ushort LargeAddressAware = 0x0020; + + // ExecutableImage | (!pe64 ? 32BitsMachine : LargeAddressAware) + var characteristics = (ushort) (0x0002 | (!pe64 ? 0x0100 : LargeAddressAware)); if (module.Kind == ModuleKind.Dll || module.Kind == ModuleKind.NetModule) characteristics |= 0x2000; + + if (module.Image != null && (module.Image.Characteristics & LargeAddressAware) != 0) + characteristics |= LargeAddressAware; + WriteUInt16 (characteristics); // Characteristics } diff --git a/Mono.Cecil/ModuleDefinition.cs b/Mono.Cecil/ModuleDefinition.cs index 8fb35a5..b17f7c4 100644 --- a/Mono.Cecil/ModuleDefinition.cs +++ b/Mono.Cecil/ModuleDefinition.cs @@ -586,7 +586,7 @@ namespace Mono.Cecil { this.RuntimeVersion = image.RuntimeVersion; this.architecture = image.Architecture; this.attributes = image.Attributes; - this.characteristics = image.Characteristics; + this.characteristics = image.DllCharacteristics; this.linker_version = image.LinkerVersion; this.subsystem_major = image.SubSystemMajor; this.subsystem_minor = image.SubSystemMinor; diff --git a/Test/Mono.Cecil.Tests/ImageReadTests.cs b/Test/Mono.Cecil.Tests/ImageReadTests.cs index de7a2cc..ef6ab06 100644 --- a/Test/Mono.Cecil.Tests/ImageReadTests.cs +++ b/Test/Mono.Cecil.Tests/ImageReadTests.cs @@ -100,6 +100,14 @@ namespace Mono.Cecil.Tests { }, verify: !Platform.OnMono); } + [Test] + public void AnyCPU32BitPreferred () + { + TestModule ("anycpu32bitpreferred.exe", module => { + Assert.AreNotEqual (0, module.Image.Characteristics & 0x0020); + }); + } + [Test] public void X64ModuleTextOnlySection () { diff --git a/Test/Resources/assemblies/anycpu32bitpreferred.exe b/Test/Resources/assemblies/anycpu32bitpreferred.exe new file mode 100644 index 0000000..e758a7f Binary files /dev/null and b/Test/Resources/assemblies/anycpu32bitpreferred.exe differ -- cgit v1.2.3 From 04b44978799b4c5268955de2219cda45904aa397 Mon Sep 17 00:00:00 2001 From: Jb Evain Date: Thu, 1 Jul 2021 15:16:23 -0700 Subject: Bump to 0.11.4 --- Mono.Cecil.nuspec | 2 +- ProjectInfo.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Mono.Cecil.nuspec b/Mono.Cecil.nuspec index 7a59bce..626c5ac 100644 --- a/Mono.Cecil.nuspec +++ b/Mono.Cecil.nuspec @@ -2,7 +2,7 @@ Mono.Cecil - 0.11.3.0 + 0.11.4.0 Mono.Cecil Jb Evain Jb Evain diff --git a/ProjectInfo.cs b/ProjectInfo.cs index 57fdb1f..fe89134 100644 --- a/ProjectInfo.cs +++ b/ProjectInfo.cs @@ -15,6 +15,6 @@ using System.Runtime.InteropServices; [assembly: ComVisible (false)] -[assembly: AssemblyVersion ("0.11.3.0")] -[assembly: AssemblyFileVersion ("0.11.3.0")] -[assembly: AssemblyInformationalVersion ("0.11.3.0")] +[assembly: AssemblyVersion ("0.11.4.0")] +[assembly: AssemblyFileVersion ("0.11.4.0")] +[assembly: AssemblyInformationalVersion ("0.11.4.0")] -- cgit v1.2.3 From ede17f98c9dd9396f9b3f4079af166a784e4baac Mon Sep 17 00:00:00 2001 From: Jb Evain Date: Fri, 2 Jul 2021 14:08:04 -0700 Subject: Fix handling of empty string constants (#776) --- Mono.Cecil/AssemblyReader.cs | 4 +++- Test/Mono.Cecil.Tests/PortablePdbTests.cs | 17 +++++++++++++++++ Test/Resources/assemblies/empty-str-const.exe | Bin 0 -> 4096 bytes Test/Resources/assemblies/empty-str-const.pdb | Bin 0 -> 2668 bytes 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Test/Resources/assemblies/empty-str-const.exe create mode 100644 Test/Resources/assemblies/empty-str-const.pdb diff --git a/Mono.Cecil/AssemblyReader.cs b/Mono.Cecil/AssemblyReader.cs index 5cd3d17..b66c162 100644 --- a/Mono.Cecil/AssemblyReader.cs +++ b/Mono.Cecil/AssemblyReader.cs @@ -3005,7 +3005,9 @@ namespace Mono.Cecil { object value; if (type.etype == ElementType.String) { - if (signature.CanReadMore () && signature.buffer [signature.position] != 0xff) { + if (!signature.CanReadMore ()) + value = ""; + else if (signature.buffer [signature.position] != 0xff) { var bytes = signature.ReadBytes ((int) (signature.sig_length - (signature.position - signature.start))); value = Encoding.Unicode.GetString (bytes, 0, bytes.Length); } else diff --git a/Test/Mono.Cecil.Tests/PortablePdbTests.cs b/Test/Mono.Cecil.Tests/PortablePdbTests.cs index 43b8cfe..d9786cb 100644 --- a/Test/Mono.Cecil.Tests/PortablePdbTests.cs +++ b/Test/Mono.Cecil.Tests/PortablePdbTests.cs @@ -474,6 +474,23 @@ namespace Mono.Cecil.Tests { } } + [Test] + public void EmptyStringLocalConstant () + { + TestModule ("empty-str-const.exe", module => { + var type = module.GetType ("$"); + var method = type.GetMethod ("
$"); + var symbol = method.DebugInformation; + + Assert.IsNotNull (symbol); + Assert.AreEqual (1, symbol.Scope.Constants.Count); + + var a = symbol.Scope.Constants [0]; + Assert.AreEqual ("value", a.Name); + Assert.AreEqual ("", a.Value); + }, symbolReaderProvider: typeof (PortablePdbReaderProvider), symbolWriterProvider: typeof (PortablePdbWriterProvider)); + } + [Test] public void SourceLink () { diff --git a/Test/Resources/assemblies/empty-str-const.exe b/Test/Resources/assemblies/empty-str-const.exe new file mode 100644 index 0000000..6cc5128 Binary files /dev/null and b/Test/Resources/assemblies/empty-str-const.exe differ diff --git a/Test/Resources/assemblies/empty-str-const.pdb b/Test/Resources/assemblies/empty-str-const.pdb new file mode 100644 index 0000000..723ec4e Binary files /dev/null and b/Test/Resources/assemblies/empty-str-const.pdb differ -- cgit v1.2.3 From 2f1077d7bb3527c3d821cb726a6d762abaea101a Mon Sep 17 00:00:00 2001 From: Tlakaelel Axayakatl Ceja Date: Thu, 22 Jul 2021 11:32:45 -0700 Subject: Update the version of Microsoft.NETFramework.ReferenceAssemblies.net40 (#787) since is detected as a package downgrade and a failure in newer SDKs --- Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index ee63f7a..6799dfb 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -14,7 +14,7 @@ true - + -- cgit v1.2.3