mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
advapi32: Avoid a buffer overflow in CredUnmarshalCredentialW.
Spotted by Stefan Leichter.
This commit is contained in:
parent
6395af1ae7
commit
bff64e8578
2 changed files with 13 additions and 2 deletions
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include <stdarg.h>
|
||||
#include <time.h>
|
||||
#include <limits.h>
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include <Security/SecKeychain.h>
|
||||
|
@ -2102,7 +2103,7 @@ static BOOL cred_decode( const WCHAR *cred, unsigned int len, char *buf )
|
|||
*/
|
||||
BOOL WINAPI CredUnmarshalCredentialW( LPCWSTR cred, PCRED_MARSHAL_TYPE type, PVOID *out )
|
||||
{
|
||||
unsigned int len, buflen, size;
|
||||
unsigned int len, buflen;
|
||||
|
||||
TRACE("%s, %p, %p\n", debugstr_w(cred), type, out);
|
||||
|
||||
|
@ -2134,8 +2135,10 @@ BOOL WINAPI CredUnmarshalCredentialW( LPCWSTR cred, PCRED_MARSHAL_TYPE type, PVO
|
|||
case UsernameTargetCredential:
|
||||
{
|
||||
USERNAME_TARGET_CREDENTIAL_INFO *target;
|
||||
ULONGLONG size = 0;
|
||||
|
||||
if (len < 9 || !cred_decode( cred + 3, 6, (char *)&size ) || !size || size % sizeof(WCHAR))
|
||||
if (len < 9 || !cred_decode( cred + 3, 6, (char *)&size ) ||
|
||||
!size || size % sizeof(WCHAR) || size > INT_MAX)
|
||||
{
|
||||
SetLastError( ERROR_INVALID_PARAMETER );
|
||||
return FALSE;
|
||||
|
|
|
@ -670,6 +670,14 @@ static void test_CredUnmarshalCredentialA(void)
|
|||
ok( username->UserName != NULL, "UserName is NULL\n" );
|
||||
ok( !lstrcmpW( username->UserName, testW ), "got %s\n", wine_dbgstr_w(username->UserName) );
|
||||
pCredFree( username );
|
||||
|
||||
type = 0;
|
||||
username = NULL;
|
||||
SetLastError( 0xdeadbeef );
|
||||
ret = pCredUnmarshalCredentialA( "@@CA-----0BQZAMHA0BA", &type, (void **)&username );
|
||||
error = GetLastError();
|
||||
ok( !ret, "unexpected success\n" );
|
||||
ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
|
||||
}
|
||||
|
||||
static void test_CredIsMarshaledCredentialA(void)
|
||||
|
|
Loading…
Reference in a new issue