mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[winpr,ncrypt] fix convertKeyType
* use _wcsnlen * fix inverted length check
This commit is contained in:
@@ -486,10 +486,12 @@ static SECURITY_STATUS collect_keys(NCryptP11ProviderHandle* provider, P11EnumKe
|
||||
static BOOL convertKeyType(CK_KEY_TYPE k, LPWSTR dest, DWORD len, DWORD* outlen)
|
||||
{
|
||||
const WCHAR* r = NULL;
|
||||
size_t retLen = 0;
|
||||
|
||||
#define ALGO_CASE(V, S) \
|
||||
case V: \
|
||||
r = S; \
|
||||
#define ALGO_CASE(V, S) \
|
||||
case V: \
|
||||
r = S; \
|
||||
retLen = _wcsnlen((S), ARRAYSIZE((S))); \
|
||||
break
|
||||
switch (k)
|
||||
{
|
||||
@@ -522,7 +524,6 @@ static BOOL convertKeyType(CK_KEY_TYPE k, LPWSTR dest, DWORD len, DWORD* outlen)
|
||||
}
|
||||
#undef ALGO_CASE
|
||||
|
||||
size_t retLen = _wcslen(r);
|
||||
if (retLen > UINT32_MAX)
|
||||
return FALSE;
|
||||
|
||||
@@ -537,7 +538,7 @@ static BOOL convertKeyType(CK_KEY_TYPE k, LPWSTR dest, DWORD len, DWORD* outlen)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (retLen + 1 < len)
|
||||
if (retLen + 1 > len)
|
||||
{
|
||||
WLog_ERR(TAG, "target buffer is too small for algo name");
|
||||
return FALSE;
|
||||
|
||||
Reference in New Issue
Block a user