[PATCH v12 6/7] mshtml: Set the builtin prop to NULL even when removeAttribute returns false in IE8 mode.
Jacek Caban
jacek at codeweavers.com
Thu Dec 2 10:23:41 CST 2021
On 12/2/21 4:37 PM, Gabriel Ivăncescu wrote:
> On 02/12/2021 15:51, Jacek Caban wrote:
>> On 12/2/21 2:20 PM, Gabriel Ivăncescu wrote:
>>> On 01/12/2021 21:24, Jacek Caban wrote:
>>>> Hi Gabriel,
>>>>
>>>> On 12/1/21 2:41 PM, Gabriel Ivăncescu wrote:
>>>>> + if(dispex_compat_mode(This) >= COMPAT_MODE_IE8) {
>>>>> + V_VT(&var) = VT_NULL;
>>>>> + builtin_propput(This, func, &dp, NULL);
>>>>> + }
>>>>
>>>>
>>>> That doesn't seem universally right, see the attached test for an
>>>> example.
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Jacek
>>>>
>>>
>>> Are you sure this is related to this patch? I did some digging but
>>> it seems to be a completely different issue to me. This patch is
>>> about removeAttribute returning false and setting to NULL, which
>>> happens with event handlers.
>>
>>
>> Yes, the existing code is already wrong, we probably shouldn't
>> blindly try to set value to VT_EMPTY in the first place. Trying to
>> set the property to another value (of type that doesn't make sense
>> unless you assume that those are event handlers) based on a previous
>> error that we know nothing about (it could be OOM?) is making it even
>> worse. Is there another reason for this patch than a todo_wine in tests?
>>
>>
>> Thanks,
>>
>> Jacek
>>
>
> I think the VT_EMPTY is correct for pre IE8 modes, since I didn't get
> any failures there, just not for IE8.
>
> Even if we assume that we do implement it correctly for IE8 to reset
> it to default values at some point, it would *still* not work without
> this patch for this particular case, since that would handle the case
> where it returns true, not false. Isn't this patch still needed, then?
> I can't see how else it would work.
I would need a deeper look to propose a solution. For example, if we had
a way to recognize an event handler property, it could help here.
> As for the reason, well, prototype.js sets "onclick" to an array and
> later removeAttribute on it. Not sure to what extent it's useful
> though. But it was a pretty simple fix that I honestly see no
> downsides to—even in the future should we implement the rest properly.
Well, it's really not that hard to read prototype.js. It just does a
check if attributes are converted to string and if not, applies some
hacks for early IE version soon. removeAttribute is just a clean up, it
will take the right code path anyway. And whatever code path it takes,
it should be fine for us.
Jacek
More information about the wine-devel
mailing list