diff options
author | Jb Evain <jb@evain.net> | 2017-09-28 02:08:23 +0300 |
---|---|---|
committer | Jb Evain <jb@evain.net> | 2017-09-28 02:09:41 +0300 |
commit | 021b7ce7f7b7ba5fcd925f7d5332097e874abfce (patch) | |
tree | 4efffe20d5cf484b82ae0b8d4248447f13be3583 /symbols | |
parent | d419d591b97f6c161372c985b32fdae7d93d6e68 (diff) |
Prevent a crash when reading VB generated pdb
Diffstat (limited to 'symbols')
-rw-r--r-- | symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs | 15 | ||||
-rw-r--r-- | symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs | 12 | ||||
-rw-r--r-- | symbols/pdb/Test/Resources/assemblies/AVbTest.exe | bin | 0 -> 9216 bytes | |||
-rw-r--r-- | symbols/pdb/Test/Resources/assemblies/AVbTest.pdb | bin | 0 -> 24064 bytes |
4 files changed, 24 insertions, 3 deletions
diff --git a/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs index b07191d..4554638 100644 --- a/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs +++ b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs @@ -280,7 +280,11 @@ namespace Mono.Cecil.Pdb { break; } case 'A': - var index = used_namespace.IndexOf(' '); + var index = used_namespace.IndexOf (' '); + if (index < 0) { + target = new ImportTarget (ImportTargetKind.ImportNamespace) { @namespace = used_namespace }; + break; + } var alias_value = used_namespace.Substring (1, index - 1); var alias_target_value = used_namespace.Substring (index + 2); switch (used_namespace [index + 1]) { @@ -294,6 +298,15 @@ namespace Mono.Cecil.Pdb { break; } break; + case '*': + target = new ImportTarget (ImportTargetKind.ImportNamespace) { @namespace = value }; + break; + case '@': + if (!value.StartsWith ("P:")) + continue; + + target = new ImportTarget (ImportTargetKind.ImportNamespace) { @namespace = value.Substring (2) }; + break; } if (target != null) diff --git a/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs b/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs index 054f1f8..b823fce 100644 --- a/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs +++ b/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs @@ -143,7 +143,7 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm); Assert.AreEqual (DocumentLanguage.FSharp, document.Language); Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor); - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); } [Test] @@ -157,7 +157,15 @@ namespace Mono.Cecil.Tests { public void EmptyRootNamespace () { TestModule ("EmptyRootNamespace.dll", module => { - }, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider)); + }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + } + + [Test] + public void VisualBasicNamespace () + { + TestModule ("AVbTest.exe", module => { + }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider)); + } [Test] diff --git a/symbols/pdb/Test/Resources/assemblies/AVbTest.exe b/symbols/pdb/Test/Resources/assemblies/AVbTest.exe Binary files differnew file mode 100644 index 0000000..54dcdf6 --- /dev/null +++ b/symbols/pdb/Test/Resources/assemblies/AVbTest.exe diff --git a/symbols/pdb/Test/Resources/assemblies/AVbTest.pdb b/symbols/pdb/Test/Resources/assemblies/AVbTest.pdb Binary files differnew file mode 100644 index 0000000..c46ce47 --- /dev/null +++ b/symbols/pdb/Test/Resources/assemblies/AVbTest.pdb |