advapi: test and fix GetUserName() in case where buffer is too small

Andrew Nguyen anguyen at codeweavers.com
Tue May 31 08:45:36 CDT 2011


On 05/31/2011 08:17 AM, Hans Leidekker wrote:
> On Tue, 2011-05-31 at 06:32 -0500, Andrew Nguyen wrote:
> 
>> -    DWORD sizeW = *lpSize * 2;
>> +    DWORD sizeW = 0;
>> +
>> +    GetUserNameW( NULL, &sizeW );
> 
> Can we avoid the extra call?

I was trying to avoid making the assumption that a Unicode buffer with
*lpSize Unicode characters would necessarily be appropriate for the
second GetUserNameW call. Considering the failure path for the
GetUserNameW call in the old version, I don't believe we know what the
number of ANSI characters actually is unless we had WideCharToMultiByte
figure it out. Thus, my intent was to never allow a failure due to
insufficient buffer size so GetUserNameA knows the appropriate value for
sizeA.

That said, I suspect Windows does allocate the Unicode buffer based on
the passed buffer size, so I think just going back to the old approach
of unconditionally allocating *lpSize Unicode characters should be okay
in practice.

>> I didn't intend to scoop Dan's work, but I have a version of his fix,
>> which is attached, with deeper tests which I wrote before Hans expressed
>> his concerns. Should I just send in the tests with todo_wine and let Dan
>> fix those, or should I send a revised version and allow a "winner" to be
>> picked?
> 
> I vote for getting some tests in first.
> 
> 

I'll go ahead and extract the tests to a separate patch then.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 899 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20110531/4c59d719/attachment.pgp>


More information about the wine-devel mailing list