[PATCH v2 2/3] windows.globalization: Implement IGlobalizationPreferencesStatics::Languages.

Rémi Bernon rbernon at codeweavers.com
Fri Mar 26 04:30:11 CDT 2021


On 3/26/21 10:27 AM, Jacek Caban wrote:
> On 3/26/21 10:05 AM, Rémi Bernon wrote:
>> On 3/25/21 10:46 PM, Jacek Caban wrote:
>>> Hi Rémi,
>>>
>>> It looks mostly good, but error handling nuances could be improved.
>>>
>>> On 3/25/21 9:17 AM, Rémi Bernon wrote:
>>>> +static HRESULT STDMETHODCALLTYPE 
>>>> hstring_vector_GetMany(IVectorView_HSTRING *iface,
>>>> +        ULONG start_index, ULONG items_size, HSTRING *items, UINT 
>>>> *count)
>>>> +{
>>>> +    struct hstring_vector *impl = 
>>>> impl_from_IVectorView_HSTRING(iface);
>>>> +    HRESULT hr;
>>>> +    ULONG i;
>>>> +
>>>> +    TRACE("iface %p, start_index %#x, items %p, count %p.\n", 
>>>> iface, start_index, items, count);
>>>> +
>>>> +    memset(items, 0, items_size * sizeof(HSTRING *));
>>>> +
>>>> +    for (i = start_index; i < impl->count && i < start_index + 
>>>> items_size; ++i)
>>>> +        if (FAILED(hr = WindowsDuplicateString(impl->values[i], 
>>>> items + i - start_index)))
>>>> +            return hr;
>>>
>>> This leaks previously allocated strings in error case.
>>>
>>
>> Sure, then in this particular case the largest vector has one element, 
>> so it's not actually leaking anything.
> 
> Sure, but if you want to assume that, then you don't need the loop at 
> all. If you're making things generic, let's make it right (and from the 
> looks of it, it's likely to be useful when implementation of the DLL is 
> more complete).
> 
>> Also, the elements have not been created with 
>> WindowsCreateStringReference, so WindowsDuplicateString will only 
>> increments the string refcount count and is never going to fail.
> 
> Okay, but if you can assume that, then the error check is not needed at 
> all.
> 
>>>> +    WindowsCreateString(locale, wcslen(locale), &hstring);
>>>
>>> This may fail.
>>>
>>
>> Here the only possible error is an allocation error. I honestly expect 
>> that things are going to be pretty bad very soon if we fail to 
>> allocate a few bytes. But yes, the status should be returned.
> 
> Yes, it's largely about consistency: you check for similar errors in 
> other places.
> 
> Jacek

Yes, no worries I'm all for correctness. It was just for the pleasure or 
the argument and because I really want to be done with these stubs :)

Thanks for the thorough reviews!
-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list