#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#47928 | Vladislav Vaintroub | 16 Oct |