Skip to content

Commit 8077d5b

Browse files
SNOW-1989063: Fix reading tokens in Windows Credential Manager implementation (#1116)
1 parent aacd971 commit 8077d5b

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

Snowflake.Data.Tests/UnitTests/CredentialManager/SFBaseCredentialManagerTest.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,39 @@ public void TestGetCredentialsForProperKey()
8585
// assert
8686
Assert.AreEqual(token, result);
8787
}
88+
89+
[Test]
90+
public void TestGetCredentialsForTokenWithManyCharacters()
91+
{
92+
// arrange
93+
var key = "mockKey";
94+
var expectedToken = "access-token-123";
95+
96+
// act
97+
_credentialManager.SaveCredentials(key, expectedToken);
98+
99+
// assert
100+
Assert.AreEqual(expectedToken, _credentialManager.GetCredentials(key));
101+
102+
// act
103+
_credentialManager.RemoveCredentials(key);
104+
105+
// assert
106+
Assert.IsTrue(string.IsNullOrEmpty(_credentialManager.GetCredentials(key)));
107+
}
108+
109+
[Test]
110+
public void TestGetCredentialsForCredentialsThatDoesNotExist()
111+
{
112+
// arrange
113+
var key = "fakeKey";
114+
115+
// act
116+
_credentialManager.RemoveCredentials(key);
117+
var token = _credentialManager.GetCredentials(key);
118+
119+
// assert
120+
Assert.IsTrue(string.IsNullOrEmpty(token));
121+
}
88122
}
89123
}

Snowflake.Data/Core/CredentialManager/Infrastructure/SFCredentialManagerWindowsNativeImpl.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ public string GetCredentials(string key)
4646
using (var critCred = new CriticalCredentialHandle(nCredPtr))
4747
{
4848
var cred = critCred.GetCredential();
49+
if (cred.CredentialBlob.Length > (int)cred.CredentialBlobSize / 2)
50+
{
51+
return cred.CredentialBlob.Substring(0, (int)(cred.CredentialBlobSize / 2));
52+
}
4953
return cred.CredentialBlob;
5054
}
5155
}

0 commit comments

Comments
 (0)