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-06-08 18:01:54 +0300
committerJb Evain <jbevain@gmail.com>2015-06-08 18:01:54 +0300
commit51d55cb3e9228638382eefdb4c8a633e2249569e (patch)
tree4aff94f7155f6677250a27ddf6b3d788e1eb7170
parent25635277869cf34c1dc79f6c8f045b0a42ce58b5 (diff)
Protect against wrongly constructed versions
Test by @gluck. Fix #227.
-rw-r--r--Mono.Cecil/AssemblyNameReference.cs18
-rw-r--r--Test/Mono.Cecil.Tests/AssemblyTests.cs10
2 files changed, 26 insertions, 2 deletions
diff --git a/Mono.Cecil/AssemblyNameReference.cs b/Mono.Cecil/AssemblyNameReference.cs
index a202e91..6521dc6 100644
--- a/Mono.Cecil/AssemblyNameReference.cs
+++ b/Mono.Cecil/AssemblyNameReference.cs
@@ -49,7 +49,7 @@ namespace Mono.Cecil {
public Version Version {
get { return version; }
set {
- version = value ?? Mixin.ZeroVersion;
+ version = Mixin.CheckVersion (value);
full_name = null;
}
}
@@ -239,7 +239,7 @@ namespace Mono.Cecil {
throw new ArgumentNullException ("name");
this.name = name;
- this.version = version ?? Mixin.ZeroVersion;
+ this.version = Mixin.CheckVersion (version);
this.hash_algorithm = AssemblyHashAlgorithm.None;
this.token = new MetadataToken (TokenType.AssemblyRef);
}
@@ -253,5 +253,19 @@ namespace Mono.Cecil {
partial class Mixin {
public static Version ZeroVersion = new Version (0, 0, 0 ,0);
+
+ public static Version CheckVersion (Version version)
+ {
+ if (version == null)
+ return ZeroVersion;
+
+ if (version.Build == -1)
+ return new Version (version.Major, version.Minor, 0, 0);
+
+ if (version.Revision == -1)
+ return new Version (version.Major, version.Minor, version.Build, 0);
+
+ return version;
+ }
}
}
diff --git a/Test/Mono.Cecil.Tests/AssemblyTests.cs b/Test/Mono.Cecil.Tests/AssemblyTests.cs
index e7af8d4..c7e5ef6 100644
--- a/Test/Mono.Cecil.Tests/AssemblyTests.cs
+++ b/Test/Mono.Cecil.Tests/AssemblyTests.cs
@@ -45,5 +45,15 @@ namespace Mono.Cecil.Tests {
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);
}
+
+ [Test]
+ public void NoBuildOrMajor ()
+ {
+ var name = new AssemblyNameReference ("Foo", new Version (0, 0));
+ Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
+
+ name = new AssemblyNameReference ("Foo", new Version (0, 0, 0));
+ Assert.AreEqual ("Foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", name.FullName);
+ }
}
}