cleanup a->w cross calls in advapi32/crypt.c
Mike McCormack
mike at codeweavers.com
Mon Aug 2 05:55:12 CDT 2004
James Hawkins wrote:
> + PWSTR keyname;
>
> - keyname = CRYPT_Alloc(strlen(KEYSTR) + strlen(pProvName) +1);
> + keyname = CRYPT_Alloc((strlenW(KEYSTR) + strlenW(pProvName) + 1) * sizeof(WCHAR));
> if (keyname)
> {
> - strcpy(keyname, KEYSTR);
> - strcpy(keyname + strlen(KEYSTR), pProvName);
> + strcpyW(keyname, KEYSTR);
> + strcpyW(keyname + strlenW(KEYSTR) * sizeof(WCHAR), pProvName);
> } else
> SetLastError(ERROR_NOT_ENOUGH_MEMORY);
> return keyname;
> }
This doesn't look right.... when using pointer arithmetic, you do so in
increments of the pointer's type (eg. WCHAR). The following two lines
are the same, and are both wrong:
strcpyW(keyname + strlenW(KEYSTR) * sizeof(WCHAR), pProvName);
strcpyW(&keyname[strlenW(KEYSTR) * sizeof(WCHAR)], pProvName);
The right version would be:
strcpyW(&keyname[strlenW(KEYSTR)], pProvName);
but how about just using:
strcatW( keyname, pProvname );
Mike
More information about the wine-devel
mailing list