List:Commits« Previous MessageNext Message »
From:Vladislav Vaintroub Date:October 16 2009 2:45pm
Subject:bzr commit into connector-net-6.1 branch (vvaintroub:778) Bug#47928
View as plain text  
#At file:///H:/connector_net/6.1/ based on revid:vvaintroub@stripped

  778 Vladislav Vaintroub	2009-10-16
      fixed crash that can occur when oldGuids are used and binary(16) column  used for GUID 
      contains a null value (thanks Troy!) (bug#47928)

    modified:
      CHANGES
      MySql.Data/Provider/Source/Types/MySqlGuid.cs
      MySql.Data/Tests/Source/DataTypeTests.cs
=== modified file 'CHANGES'
--- a/CHANGES	2009-10-14 23:15:49 +0000
+++ b/CHANGES	2009-10-16 14:45:02 +0000
@@ -3,6 +3,8 @@ Version 6.1.3
 - fixed compilation problem in NativeDriver inside ExecuteDirect  (bug #47354)
 - fixed default collation bug with session provider table (bug #47332)
 - in sessionState provider, timeout value was read from the wrong (root) web.config (bug#47815)
+- fixed crash that can occur when oldGuids are used and binary(16) column  used for GUID 
+  contains a null value (thanks Troy!) (bug#47928)
 
 Version 6.1.2
 - fixed hanging after losing network connectivity to server (bug#43761) 

=== modified file 'MySql.Data/Provider/Source/Types/MySqlGuid.cs'
--- a/MySql.Data/Provider/Source/Types/MySqlGuid.cs	2009-07-28 20:40:35 +0000
+++ b/MySql.Data/Provider/Source/Types/MySqlGuid.cs	2009-10-16 14:45:02 +0000
@@ -182,6 +182,7 @@ namespace MySql.Data.Types
 		{
             MySqlGuid g = new MySqlGuid();
             g.isNull = true;
+            g.OldGuids = OldGuids;
             if (!nullVal)
             {
                 if (OldGuids)
@@ -192,7 +193,6 @@ namespace MySql.Data.Types
                 else
                     s = packet.ReadString(length);
                 g.mValue = new Guid(s);
-                g.OldGuids = OldGuids;
                 g.isNull = false;
             }
             return g;

=== modified file 'MySql.Data/Tests/Source/DataTypeTests.cs'
--- a/MySql.Data/Tests/Source/DataTypeTests.cs	2009-07-28 20:40:35 +0000
+++ b/MySql.Data/Tests/Source/DataTypeTests.cs	2009-10-16 14:45:02 +0000
@@ -889,10 +889,10 @@ namespace MySql.Data.MySqlClient.Tests
 
                 Guid g = new Guid("32A48AC5-285A-46c6-A0D4-158E6E39729C");
                 MySqlCommand cmd = new MySqlCommand("INSERT INTO Test VALUES (1, ?guid)", c);
-                MySqlParameter p = new MySqlParameter();
-                p.ParameterName = "guid";
-                p.Value = Guid.NewGuid();
-                cmd.Parameters.Add(p);
+                //MySqlParameter p = new MySqlParameter();
+                //p.ParameterName = "guid";
+                //p.Value = Guid.NewGuid();
+                cmd.Parameters.AddWithValue("guid", Guid.NewGuid());
                 cmd.ExecuteNonQuery();
 
                 cmd.CommandText = "SELECT * FROM Test";
@@ -942,5 +942,42 @@ namespace MySql.Data.MySqlClient.Tests
             Guid readG = (Guid)cmd.ExecuteScalar();
             Assert.AreEqual(g, readG);
         }
+
+        /// <summary>
+        /// Bug #47928 Old Guids=true setting is lost after null value is
+        /// encountered in a Binary(16) 
+        /// </summary>
+        [Test]
+        public void OldGuidsWithNull()
+        {
+            execSQL("DROP TABLE IF EXISTS Test");
+            execSQL("CREATE TABLE Test (id INT, guid BINARY(16))");
+
+            string connStr = GetConnectionString(true) + ";old guids=true";
+            using (MySqlConnection c = new MySqlConnection(connStr))
+            {
+                c.Open();
+
+                MySqlCommand cmd = new MySqlCommand("INSERT INTO Test VALUES (1, ?guid)", c);
+                cmd.Parameters.AddWithValue("guid", Guid.NewGuid());
+                cmd.ExecuteNonQuery();
+
+                cmd.Parameters["guid"].Value = null;
+                cmd.ExecuteNonQuery();
+                cmd.Parameters["guid"].Value = Guid.NewGuid();
+                cmd.ExecuteNonQuery();
+
+                cmd.CommandText = "SELECT guid FROM Test";
+                using (MySqlDataReader reader = cmd.ExecuteReader())
+                {
+                    //In Bug #47928, following loop will crash after encountering
+                    // null value.
+                    while (reader.Read())
+                    {
+                        object o = reader.GetValue(0);
+                    }
+                }
+            }
+        }
     }
 }


Attachment: [text/bzr-bundle] bzr/vvaintroub@mysql.com-20091016144502-7lv65451hn14h8z1.bundle
Thread
bzr commit into connector-net-6.1 branch (vvaintroub:778) Bug#47928Vladislav Vaintroub16 Oct