mshtml: Added IHTMLTable::width property implementation. (try 4)

Jacek Caban jacek at codeweavers.com
Sat Apr 26 08:33:43 CDT 2014


On 04/26/14 15:20, Zhenbo Li wrote:
> Thank you.
> I'm sorry for the mistakes I've made.
>
> As this patch still needs improving, maybe mark 104193, 104110, 103576
> as rejected?

Don't worry too much about them being marked one way or another.

> 2014-04-26 20:44 GMT+08:00 Jacek Caban <jacek at codeweavers.com>:
>> Hi Zhenbo,
>>
>> This is better, but:
>>
>> On 04/26/14 05:12, Zhenbo Li wrote:
>>
>> +    hres = var2str(&v, &val);
>> +
>> +    if (hres != S_OK){
>> +        ERR("Set Width(%s) failed when initializing a nsAString!\n",
>> +            debugstr_variant(&v));
>> +        nsAString_Finish(&val);
>>
>>
>> Again, this is not initialized in the error case.
> As I've added
>> +    default:
>> +        nsAString_Init(nsstr, NULL);
>> +        FIXME("unsupported arg %s\n", debugstr_variant(p));
>> +        return E_NOTIMPL;
>> +    }
> Isn't it enough?

I missed that change, but I think it's wrong. There are other error
cases as well. nsAString_Init failure also leaves the string
uninitialized (and it's on my TODO list to make sure that we may make
nsAString_Init infailable, but that's a different story). It's also
generally sane to expect that if a function fails, it's output parameter
is not initialized. Please remove this new nsAString_Init call and
nsAString_Finish in error case.

> Or you mean here?
>> +    ret = nsAString_Init(nsstr, str);
>> +    SysFreeString(str);
>> +    return ret ? S_OK : E_OUTOFMEMORY;
> Should I free a string which failed when initializing due to out-of-memory?

Which one? The way it's done currently is right.

>> +
>> +    hres = nsstr_to_truncated_bstr(&val, &bstr);
>> +    if (FAILED(hres)) {
>> +        SysFreeString(bstr);
>>
>>
>> And bstr is not initialized in error case.
> The error case comes from
>> +    ret = end ? SysAllocStringLen(str, end-str) : SysAllocString(str);
>> +    if(!ret)
>> +        return E_OUTOFMEMORY;
> I have the same question.

Please read the code again. bstr is not initialized in this case, so you
can't free it.

Jacek



More information about the wine-devel mailing list