"James Hawkins" truiken@gmail.com wrote:
This is a resubmit of my original patch that cleans up a->w cross calls in crypt.
Changelog * cleanup a->w cross calls in advapi32/crypt.c
- static const WCHAR KEYSTR[] = {
 - 'S','o','f','t','w','a','r','e','\','\',
 'M','i','c','r','o','s','o','f','t','\\','\\',- 'C','r','y','p','t','o','g','r','a','p','h','y','\','\',
 - 'D','e','f','a','u','l','t','s','\','\',
 - 'P','r','o','v','i','d','e','r','\','\',0
 - };
 
Remove double backslashes here and everywhere else.
- keyname = CRYPT_Alloc(strlen(KEYSTR) + strlen(pProvName) +1);
 
- keyname = CRYPT_Alloc(strlenW(KEYSTR) + strlenW(pProvName) + 1);
 
Add '* sizeof(WCHAR)' and everywhere else where storage for unicode strings is allocated.
- keyname = CRYPT_Alloc( (user ? strlen(USERSTR) : strlen(MACHINESTR)) +1);
 
- keyname = CRYPT_Alloc( (user ? strlenW(USERSTR) : strlenW(MACHINESTR)) +1);
 
Add '* sizeof(WCHAR)'
- static WCHAR nameW[] = {'N','a','m','e',0};
 - static WCHAR typeW[] = {'T','y','p','e',0};
 - static WCHAR imagePathW[] = {'I','m','a','g','e',' ','P','a','t','h',0};
 - static WCHAR signatureW[] = {'S','i','g','n','a','t','u','r','e',0};
 - static WCHAR sigInFileW[] = {'S','i','g','I','n','F','i','l','e',0};
 
Add 'const'.
- if ( !(provname = CRYPT_Alloc(strlen(pszProvider) +1)) )
 
- if ( !(provname = CRYPT_Alloc(strlenW(pszProvider) +1)) )
 
Add '* sizeof(WCHAR)'
- len = ExpandEnvironmentStringsA(temp, NULL, 0);
 
- len = ExpandEnvironmentStringsW(temp, NULL, 0); if ( !(imagepath = CRYPT_Alloc(len)) )
 
Add '* sizeof(WCHAR)'
... And lots of similar bugs.