[PATCH 3/3] shell32/autocomplete: Revamp pwzsRegKeyPath handling so it can deal with arbitrary sizes and make it more robust

Alexandre Julliard julliard at winehq.org
Thu Aug 30 06:50:59 CDT 2018


Gabriel Iv─âncescu <gabrielopcode at gmail.com> writes:

> On Thu, Aug 30, 2018 at 12:59 PM, Alexandre Julliard
> <julliard at winehq.org> wrote:
>> Gabriel Iv─âncescu <gabrielopcode at gmail.com> writes:
>>
>>
>> This doesn't seem like an improvement. In particular, querying the key
>> twice just to retrieve the length is making things worse, and creating
>> more race conditions. Also note that RegQueryValueExW already adds a
>> terminating null if necessary.
>>
>> --
>> Alexandre Julliard
>> julliard at winehq.org
>
> Yes indeed the first query gets the length, but the second one makes
> sure the length is exactly the same so there can't be any race
> condition, unless I'm missing something?

There can still be a race, only you are making the function fail in that
case, that's not nice behavior. The right way to do that sort of thing
is to allocate a reasonable buffer, get the string (without querying the
length first), and on overflow restart the loop with a larger buffer.

> About the NUL terminator: while it may be true for Wine's
> implementation, MSDN states that it's not necessarily the case (and
> tell you to use GetRegValue, which is more convoluted), and I imagine
> some application might hook RegQueryValueExW and provide a
> MSDN-compatible implementation or something (remote chance but it
> doesn't really hurt). Nevertheless, if you really think it's not an
> issue I will take that extra bit out then.

The Wine implementation replicates the Windows behavior, based on test
cases. That's more reliable than MSDN.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list