From ed4f824ed6eb96e0e69b095b2930181ce5e312f4 Mon Sep 17 00:00:00 2001 From: JRahnama Date: Wed, 8 Mar 2023 10:28:10 -0800 Subject: [PATCH 1/3] Addressing failure on AE wehn symetric key encryption fails. --- .../netcore/src/Microsoft/Data/SqlClient/TdsParser.cs | 1 + .../netfx/src/Microsoft/Data/SqlClient/TdsParser.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs index 49327a4cdd..b3dd41f764 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -6080,6 +6080,7 @@ internal bool TryReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, int length, T } catch (Exception e) { + _physicalStateObj.HasPendingData = false; throw SQL.ColumnDecryptionFailed(columnName, null, e); } } diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs index a15da77757..a2a8c520fd 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -6884,6 +6884,7 @@ internal bool TryReadSqlValue(SqlBuffer value, } catch (Exception e) { + _physicalStateObj.HasPendingData = false; throw SQL.ColumnDecryptionFailed(columnName, null, e); } } From db1f035ae81008d131b6d3863ad7175da43db9db Mon Sep 17 00:00:00 2001 From: JRahnama Date: Tue, 14 Mar 2023 10:21:53 -0700 Subject: [PATCH 2/3] Drain Data --- .../netcore/src/Microsoft/Data/SqlClient/TdsParser.cs | 6 +++++- .../netfx/src/Microsoft/Data/SqlClient/TdsParser.cs | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs index b3dd41f764..264532032a 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -6080,7 +6080,11 @@ internal bool TryReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, int length, T } catch (Exception e) { - _physicalStateObj.HasPendingData = false; + if (stateObj is not null) + { + DrainData(stateObj); + stateObj.HasPendingData = false; + } throw SQL.ColumnDecryptionFailed(columnName, null, e); } } diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs index a2a8c520fd..325fced1cb 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -6884,7 +6884,11 @@ internal bool TryReadSqlValue(SqlBuffer value, } catch (Exception e) { - _physicalStateObj.HasPendingData = false; + if (stateObj is not null) + { + DrainData(stateObj); + stateObj._pendingData = false; + } throw SQL.ColumnDecryptionFailed(columnName, null, e); } } From 75733a946fd319c2087106b87a45764a0e6b6222 Mon Sep 17 00:00:00 2001 From: Javad Rahnama Date: Wed, 22 Mar 2023 21:09:17 -0700 Subject: [PATCH 3/3] commit --- .../netcore/src/Microsoft/Data/SqlClient/TdsParser.cs | 4 +++- .../netfx/src/Microsoft/Data/SqlClient/TdsParser.cs | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs index 264532032a..4998251691 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -6082,7 +6082,9 @@ internal bool TryReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, int length, T { if (stateObj is not null) { - DrainData(stateObj); + // call to decrypt column keys has failed. The data wont be decrypted. + // Not setting the value to false, forces the driver to look for column value. + // Packet received from Key Vault will throws invalid token header. stateObj.HasPendingData = false; } throw SQL.ColumnDecryptionFailed(columnName, null, e); diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs index 325fced1cb..07dda340ae 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs @@ -6886,7 +6886,9 @@ internal bool TryReadSqlValue(SqlBuffer value, { if (stateObj is not null) { - DrainData(stateObj); + // call to decrypt column keys has failed. The data wont be decrypted. + // Not setting the value to false, forces the driver to look for column value. + // Packet received from Key Vault will throws invalid token header. stateObj._pendingData = false; } throw SQL.ColumnDecryptionFailed(columnName, null, e);