From affbb9c8cdc5dee6cbfd6072318006666384723b Mon Sep 17 00:00:00 2001 From: Adam Poit Date: Thu, 25 May 2017 16:18:48 -0700 Subject: [PATCH 1/2] Escape single quote and backslash when writing GUIDs as byte arrays. --- src/MySqlConnector/MySqlClient/MySqlParameter.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/MySqlConnector/MySqlClient/MySqlParameter.cs b/src/MySqlConnector/MySqlClient/MySqlParameter.cs index 0cec377e4..3a4eddb35 100644 --- a/src/MySqlConnector/MySqlClient/MySqlParameter.cs +++ b/src/MySqlConnector/MySqlClient/MySqlParameter.cs @@ -161,7 +161,12 @@ internal void AppendSqlString(BinaryWriter writer, StatementPreparerOptions opti if ((options & StatementPreparerOptions.OldGuids) != 0) { writer.WriteUtf8("_binary'"); - writer.Write(guidValue.ToByteArray()); + foreach (var by in guidValue.ToByteArray()) + { + if (by == 0x27 || by == 0x5C) + writer.Write((byte) 0x5C); + writer.Write(by); + } writer.Write((byte) '\''); } else From 8e4cad49a0d2f94cd2139502573429ad84edecb3 Mon Sep 17 00:00:00 2001 From: Bradley Grainger Date: Fri, 26 May 2017 07:16:58 -0700 Subject: [PATCH 2/2] Add test for single quote and backslash in GUIDs. --- tests/SideBySide/InsertTests.cs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/SideBySide/InsertTests.cs b/tests/SideBySide/InsertTests.cs index 2c97cce16..aef9d8f45 100644 --- a/tests/SideBySide/InsertTests.cs +++ b/tests/SideBySide/InsertTests.cs @@ -166,6 +166,38 @@ public void InsertDateTimeOffset() Assert.Equal(value.datetimeoffset1.Value.UtcDateTime, datetime); } + [Fact] + public void InsertOldGuid() + { + var csb = AppConfig.CreateConnectionStringBuilder(); + csb.OldGuids = true; + using (var connection = new MySqlConnection(csb.ConnectionString)) + { + connection.Open(); + connection.Execute(@"drop table if exists old_guids; +create table old_guids(id integer not null primary key auto_increment, guid binary(16) null);"); + + var guid = new Guid(1, 2, 3, 0x27, 0x5C, 0x7B, 0x7D, 0x22, 0x25, 0x26, 0x2C); + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = @"insert into old_guids(guid) values(@guid)"; + var parameter = cmd.CreateParameter(); + parameter.ParameterName = "@guid"; + parameter.Value = guid; + cmd.Parameters.Add(parameter); + cmd.ExecuteNonQuery(); + } + + using (var cmd = connection.CreateCommand()) + { + cmd.CommandText = @"select guid from old_guids;"; + var selected = (Guid) cmd.ExecuteScalar(); + Assert.Equal(guid, selected); + } + } + } + [Fact] public void InsertEnumValue() {