Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJb Evain <jb@evain.net>2017-09-28 02:08:23 +0300
committerJb Evain <jb@evain.net>2017-09-28 02:09:41 +0300
commit021b7ce7f7b7ba5fcd925f7d5332097e874abfce (patch)
tree4efffe20d5cf484b82ae0b8d4248447f13be3583 /symbols
parentd419d591b97f6c161372c985b32fdae7d93d6e68 (diff)
Prevent a crash when reading VB generated pdb
Diffstat (limited to 'symbols')
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs15
-rw-r--r--symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs12
-rw-r--r--symbols/pdb/Test/Resources/assemblies/AVbTest.exebin0 -> 9216 bytes
-rw-r--r--symbols/pdb/Test/Resources/assemblies/AVbTest.pdbbin0 -> 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
new file mode 100644
index 0000000..54dcdf6
--- /dev/null
+++ b/symbols/pdb/Test/Resources/assemblies/AVbTest.exe
Binary files differ
diff --git a/symbols/pdb/Test/Resources/assemblies/AVbTest.pdb b/symbols/pdb/Test/Resources/assemblies/AVbTest.pdb
new file mode 100644
index 0000000..c46ce47
--- /dev/null
+++ b/symbols/pdb/Test/Resources/assemblies/AVbTest.pdb
Binary files differ