2006-07-31 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Mon, 31 Jul 2006 16:46:44 +0000 (16:46 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Mon, 31 Jul 2006 16:46:44 +0000 (16:46 -0000)
* X509Certificate.cs :
  In 2.0 IntPtr constructor reject IntPtr.Zero as invalid handle.
  In 2.0 copy constructor rejects null argument.
  Equals() should return false if the argument cert is null.
  Also if both x509 and raw data are null it caused NRE.

* X509CapiTest.cs : ConstructorIntPtrZero() is valid only under 1.x.
* X509CertificateTest.cs :
  Added tests for equality and null certificate constructor.

svn path=/trunk/mcs/; revision=63190

mcs/class/corlib/System.Security.Cryptography.X509Certificates/ChangeLog
mcs/class/corlib/System.Security.Cryptography.X509Certificates/X509Certificate.cs
mcs/class/corlib/Test/System.Security.Cryptography.X509Certificates/ChangeLog
mcs/class/corlib/Test/System.Security.Cryptography.X509Certificates/X509CapiTest.cs
mcs/class/corlib/Test/System.Security.Cryptography.X509Certificates/X509CertificateTest.cs

index 2f87b44123422a4822754cb5c4655650013ebcc0..119335cb2b75538673809bc6c1d9b7b6edb06002 100644 (file)
@@ -1,3 +1,11 @@
+2006-07-31  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * X509Certificate.cs :
+         In 2.0 IntPtr constructor reject IntPtr.Zero as invalid handle.
+         In 2.0 copy constructor rejects null argument.
+         Equals() should return false if the argument cert is null.
+         Also if both x509 and raw data are null it caused NRE.
+
 2005-11-09  Sebastien Pouliot  <sebastien@ximian.com>
 
        * X509ContentType.cs: Removed extra [Serializable] (2.0).
index 25cd921d1cff02de90136d34fa802887734f47b6..5705165126f43f8cb911900f3b2c71cf9d0d0152 100644 (file)
@@ -160,11 +160,20 @@ namespace System.Security.Cryptography.X509Certificates {
                                Marshal.Copy (cc.pbCertEncoded, data, 0, (int)cc.cbCertEncoded);
                                x509 = new Mono.Security.X509.X509Certificate (data);
                        }
+#if NET_2_0
+                       else
+                               throw new ArgumentException ("Invalid handle.");
+#endif
                        // IntPtr.Zero results in an "empty" certificate instance
                }
        
                public X509Certificate (System.Security.Cryptography.X509Certificates.X509Certificate cert) 
                {
+#if NET_2_0
+                       if (cert == null)
+                               throw new ArgumentNullException ();
+#endif
+
                        if (cert != null) {
                                byte[] data = cert.GetRawCertData ();
                                if (data != null)
@@ -262,7 +271,9 @@ namespace System.Security.Cryptography.X509Certificates {
                                                return false;
                                }
                        }
-                       return (x509.RawData == null);
+                       else
+                               return false;
+                       return x509 == null || (x509.RawData == null);
                }
        
                // LAMESPEC: This is the equivalent of the "thumbprint" that can be seen
index ea956b03d9287be89d1f278871666a7eb4b92ad0..1c88c371ca1656c9b6ce4a69b5b08676a4a67df8 100644 (file)
@@ -1,3 +1,9 @@
+2006-07-31  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * X509CapiTest.cs : ConstructorIntPtrZero() is valid only under 1.x.
+       * X509CertificateTest.cs :
+         Added tests for equality and null certificate constructor.
+
 2005-09-25  Sebastien Pouliot  <sebastien@ximian.com>
 
        * X509CapiTest.cs: Update the test cases as the 1.x date/time bug 
index 602a0f9efd46de12c57cf1b2570305c6f9b6d93a..3bff2763f2a310f3f0292c111b428bdc23cb2c7a 100644 (file)
@@ -157,6 +157,9 @@ namespace MonoTests.System.Security.Cryptography.X509Certificates {
                }
 
                [Test]
+#if NET_2_0
+               [ExpectedException (typeof (ArgumentException))]
+#endif
                public void ConstructorIntPtrZero ()
                {
                        X509Certificate spc = new X509Certificate (IntPtr.Zero);
index c7f61eea4a91bc7bfbdea596e8a027e88c5031d8..44f6b884f74b26c8dbd49d4226d60f0935be024d 100644 (file)
@@ -53,6 +53,38 @@ public string ToString (byte[] data)
 
 //--8<-- NON GENERATED CODE STARTS HERE --8<----8<----8<----8<----8<----8<--
 
+
+[Test]
+public void Equality ()
+{
+       // copy from Certificate1()
+       byte[] cert = { 0x30,0x82,0x01,0xFF,0x30,0x82,0x01,0x6C,0x02,0x05,0x02,0x72,0x00,0x06,0xE8,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x02,0x05,0x00,0x30,0x5F,0x31,0x0B,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x20,0x30,0x1E,0x06,0x03,0x55,0x04,0x0A,0x13,0x17,0x52,0x53,0x41,0x20,0x44,0x61,0x74,0x61,0x20,0x53,0x65,0x63,0x75,0x72,0x69,0x74,0x79,0x2C,0x20,0x49,0x6E,0x63,0x2E,0x31,0x2E,0x30,0x2C,0x06,0x03,0x55,0x04,0x0B,0x13,0x25,0x53,0x65,0x63,0x75,0x72,0x65,0x20,0x53,0x65,0x72,0x76,
+               0x65,0x72,0x20,0x43,0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20,0x41,0x75,0x74,0x68,0x6F,0x72,0x69,0x74,0x79,0x30,0x1E,0x17,0x0D,0x39,0x36,0x30,0x33,0x31,0x32,0x31,0x38,0x33,0x38,0x34,0x37,0x5A,0x17,0x0D,0x39,0x37,0x30,0x33,0x31,0x32,0x31,0x38,0x33,0x38,0x34,0x36,0x5A,0x30,0x61,0x31,0x0B,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x55,0x53,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0A,0x43,0x61,0x6C,0x69,0x66,0x6F,0x72,0x6E,0x69,0x61,0x31,0x14,0x30,0x12,0x06,0x03,
+               0x55,0x04,0x0A,0x13,0x0B,0x43,0x6F,0x6D,0x6D,0x65,0x72,0x63,0x65,0x4E,0x65,0x74,0x31,0x27,0x30,0x25,0x06,0x03,0x55,0x04,0x0B,0x13,0x1E,0x53,0x65,0x72,0x76,0x65,0x72,0x20,0x43,0x65,0x72,0x74,0x69,0x66,0x69,0x63,0x61,0x74,0x69,0x6F,0x6E,0x20,0x41,0x75,0x74,0x68,0x6F,0x72,0x69,0x74,0x79,0x30,0x70,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,0x03,0x5F,0x00,0x30,0x5C,0x02,0x55,0x2D,0x58,0xE9,0xBF,0xF0,0x31,0xCD,0x79,0x06,0x50,0x5A,0xD5,0x9E,0x0E,0x2C,0xE6,0xC2,0xF7,0xF9,
+               0xD2,0xCE,0x55,0x64,0x85,0xB1,0x90,0x9A,0x92,0xB3,0x36,0xC1,0xBC,0xEA,0xC8,0x23,0xB7,0xAB,0x3A,0xA7,0x64,0x63,0x77,0x5F,0x84,0x22,0x8E,0xE5,0xB6,0x45,0xDD,0x46,0xAE,0x0A,0xDD,0x00,0xC2,0x1F,0xBA,0xD9,0xAD,0xC0,0x75,0x62,0xF8,0x95,0x82,0xA2,0x80,0xB1,0x82,0x69,0xFA,0xE1,0xAF,0x7F,0xBC,0x7D,0xE2,0x7C,0x76,0xD5,0xBC,0x2A,0x80,0xFB,0x02,0x03,0x01,0x00,0x01,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x02,0x05,0x00,0x03,0x7E,0x00,0x54,0x20,0x67,0x12,0xBB,0x66,0x14,0xC3,0x26,0x6B,0x7F,
+               0xDA,0x4A,0x25,0x4D,0x8B,0xE0,0xFD,0x1E,0x53,0x6D,0xAC,0xA2,0xD0,0x89,0xB8,0x2E,0x90,0xA0,0x27,0x43,0xA4,0xEE,0x4A,0x26,0x86,0x40,0xFF,0xB8,0x72,0x8D,0x1E,0xE7,0xB7,0x77,0xDC,0x7D,0xD8,0x3F,0x3A,0x6E,0x55,0x10,0xA6,0x1D,0xB5,0x58,0xF2,0xF9,0x0F,0x2E,0xB4,0x10,0x55,0x48,0xDC,0x13,0x5F,0x0D,0x08,0x26,0x88,0xC9,0xAF,0x66,0xF2,0x2C,0x9C,0x6F,0x3D,0xC3,0x2B,0x69,0x28,0x89,0x40,0x6F,0x8F,0x35,0x3B,0x9E,0xF6,0x8E,0xF1,0x11,0x17,0xFB,0x0C,0x98,0x95,0xA1,0xC2,0xBA,0x89,0x48,0xEB,0xB4,0x06,0x6A,0x22,0x54,
+               0xD7,0xBA,0x18,0x3A,0x48,0xA6,0xCB,0xC2,0xFD,0x20,0x57,0xBC,0x63,0x1C };
+
+       X509Certificate x509 = new X509Certificate (cert);
+       Assert.IsFalse (x509.Equals (null), "#1");
+
+#if !NET_2_0
+       X509Certificate nullobj = new X509Certificate (IntPtr.Zero);
+       Assert.IsFalse (x509.Equals (nullobj), "#2");
+       Assert.IsFalse (nullobj.Equals (null), "#3");
+       Assert.IsFalse (nullobj.Equals (x509), "#4");
+#endif
+}
+
+[Test]
+#if NET_2_0
+[ExpectedException (typeof (ArgumentNullException))]
+#endif
+public void ConstructorX509CertificateNull ()
+{
+       X509Certificate nullcopy = new X509Certificate ((X509Certificate) null);
+}
+
 //-->8-- NON GENERATED CODE ENDS HERE   -->8---->8---->8---->8---->8---->8--
 
 // Certificate: basic\COMMERCE.cer