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 <jbevain@gmail.com>2015-05-11 14:55:35 +0300
committerJb Evain <jbevain@gmail.com>2015-05-11 15:29:15 +0300
commitc123c7bbc63534d90039d5a4748e4826efef6f5c (patch)
tree348e74bb234a659ccd4d26bacadca183b7da2506
parent50452a3c059e41038cd7cd0f0009d2efa10271f9 (diff)
AssemblyNameReference.Version should never return null. Fixes #212
-rw-r--r--Mono.Cecil/AssemblyNameReference.cs19
-rw-r--r--Mono.Cecil/BaseAssemblyResolver.cs4
-rw-r--r--Mono.Cecil/ModuleDefinition.cs2
-rw-r--r--Test/Mono.Cecil.Tests/AssemblyTests.cs14
4 files changed, 27 insertions, 12 deletions
diff --git a/Mono.Cecil/AssemblyNameReference.cs b/Mono.Cecil/AssemblyNameReference.cs
index c61c336..3a9858f 100644
--- a/Mono.Cecil/AssemblyNameReference.cs
+++ b/Mono.Cecil/AssemblyNameReference.cs
@@ -49,8 +49,8 @@ namespace Mono.Cecil {
public Version Version {
get { return version; }
set {
- version = value;
- full_name = null;
+ version = value ?? Mixin.ZeroVersion;
+ full_name = null;
}
}
@@ -147,11 +147,9 @@ namespace Mono.Cecil {
var builder = new StringBuilder ();
builder.Append (name);
- if (version != null) {
- builder.Append (sep);
- builder.Append ("Version=");
- builder.Append (version.ToString ());
- }
+ builder.Append (sep);
+ builder.Append ("Version=");
+ builder.Append (Version.ToString (fieldCount: 4));
builder.Append (sep);
builder.Append ("Culture=");
builder.Append (string.IsNullOrEmpty (culture) ? "neutral" : culture);
@@ -239,7 +237,7 @@ namespace Mono.Cecil {
throw new ArgumentNullException ("name");
this.name = name;
- this.version = version;
+ this.version = version ?? Mixin.ZeroVersion;
this.hash_algorithm = AssemblyHashAlgorithm.None;
this.token = new MetadataToken (TokenType.AssemblyRef);
}
@@ -249,4 +247,9 @@ namespace Mono.Cecil {
return this.FullName;
}
}
+
+ partial class Mixin {
+
+ public static Version ZeroVersion = new Version (0, 0, 0 ,0);
+ }
}
diff --git a/Mono.Cecil/BaseAssemblyResolver.cs b/Mono.Cecil/BaseAssemblyResolver.cs
index 8a11182..76f5da1 100644
--- a/Mono.Cecil/BaseAssemblyResolver.cs
+++ b/Mono.Cecil/BaseAssemblyResolver.cs
@@ -134,7 +134,7 @@ namespace Mono.Cecil {
#if !SILVERLIGHT && !CF
if (name.IsRetargetable) {
// if the reference is retargetable, zero it
- name = new AssemblyNameReference (name.Name, new Version (0, 0, 0, 0)) {
+ name = new AssemblyNameReference (name.Name, Mixin.ZeroVersion) {
PublicKeyToken = Empty<byte>.Array,
};
}
@@ -187,7 +187,7 @@ namespace Mono.Cecil {
static bool IsZero (Version version)
{
- return version == null || (version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0);
+ return version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0;
}
#if !SILVERLIGHT && !CF
diff --git a/Mono.Cecil/ModuleDefinition.cs b/Mono.Cecil/ModuleDefinition.cs
index f887789..26534df 100644
--- a/Mono.Cecil/ModuleDefinition.cs
+++ b/Mono.Cecil/ModuleDefinition.cs
@@ -967,7 +967,7 @@ namespace Mono.Cecil {
if (name.EndsWith (".dll") || name.EndsWith (".exe"))
name = name.Substring (0, name.Length - 4);
- return new AssemblyNameDefinition (name, new Version (0, 0, 0, 0));
+ return new AssemblyNameDefinition (name, Mixin.ZeroVersion);
}
#endif
diff --git a/Test/Mono.Cecil.Tests/AssemblyTests.cs b/Test/Mono.Cecil.Tests/AssemblyTests.cs
index 7ba3dda..b427f5c 100644
--- a/Test/Mono.Cecil.Tests/AssemblyTests.cs
+++ b/Test/Mono.Cecil.Tests/AssemblyTests.cs
@@ -25,7 +25,7 @@ namespace Mono.Cecil.Tests {
}
[Test]
- public void ParseLowerCaseNameParts()
+ public void ParseLowerCaseNameParts ()
{
var name = AssemblyNameReference.Parse ("Foo, version=2.0.0.0, culture=fr-FR");
Assert.AreEqual ("Foo", name.Name);
@@ -33,5 +33,17 @@ namespace Mono.Cecil.Tests {
Assert.AreEqual (0, name.Version.Minor);
Assert.AreEqual ("fr-FR", name.Culture);
}
+
+ [Test]
+ public void ZeroVersion ()
+ {
+ var name = new AssemblyNameReference ("Foo", null);
+ Assert.AreEqual ("0.0.0.0", name.Version.ToString (fieldCount: 4));
+ Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
+
+ name = new AssemblyNameReference ("Foo", new Version (0, 0, 0, 0));
+ Assert.AreEqual ("0.0.0.0", name.Version.ToString (fieldCount: 4));
+ Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
+ }
}
}