small bug in mshtml component
Andrey Turkin
pancha at mail.nnov.ru
Fri Oct 20 14:18:20 CDT 2006
Jacek Caban wrote, on 10/20/06 22:13 MSK:
> Hi Andrey,
>
> Andrey Turkin wrote:
>> Hi,
>>
>> Just found a bug in mshtml component get_body method implementation. If
>> one call it right after creation of CLSID_HTMLDocument instance, then it
>> would return success and pass NULL as body object. Native would return
>> "empty" body object instead. Native atl.dll library uses this behavior
>> and because of this segfaults.
>> I'm not acquainted with mshtml code enough to provide bug fix or even
>> test patch (I mean "proper" test). Here is quick-n-dirty test instead:
>>
>> void test_for_body(void)
>> {
>> HRESULT hr;
>> IHTMLDocument *doc;
>> IHTMLDocument2 *doc2;
>> IPersistStreamInit *psi;
>> IHTMLElement *body;
>>
>> hr = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_SERVER,
>> &IID_IHTMLDocument, (void**)&doc);
>> ok( SUCCEEDED(hr), "CoCreateInstance failed:%08x\n", hr);
>> hr = IHTMLDocument_QueryInterface(doc, &IID_IPersistStreamInit,
>> (void**)&psi);
>> ok( SUCCEEDED(hr), "QI PSI failed %08x\n", hr );
>> IPersistStreamInit_InitNew( psi );
>> IPersistStreamInit_Release( psi );
>> hr = IHTMLDocument_QueryInterface(doc, &IID_IHTMLDocument2,
>> (void**)&doc2);
>> IHTMLDocument_Release( doc );
>> ok( SUCCEEDED(hr), "QI HD2 failed %08x\n", hr );
>> hr = IHTMLDocument2_get_body( doc2, &body);
>> IHTMLDocument2_Release( doc2 );
>> ok( SUCCEEDED(hr), "get_body failed %08x\n", hr );
>> ok( body != NULL, "get_body returned NULL\n" );
>> if ( body != NULL )
>> IHTMLElement_Release( body );
>> }
>>
>> I hope a man with good mshtml knowledge would easily turn this test into
>> neat small test in few minutes.
>>
> Thanks for your work on this. Are you sure you have wine_gecko
Right... I have mozctl installed but it weren't picked up by mshtml. I
should look better in traces before writing tests :( So, actual problem
lies in load_mozctl function in nsembed.c. This function calls
load_xpcom() but then falls down and reports failure. I've added one
word "return" and things are working now :)
> installed? I'm asking because your test works for me. The correct
> behavior requires quite much work as it depends on a correct
> loading routine, but I'd expect the currentimplementation to be
> enough in your case. The background of this problem is:
>
> - current implementation
> get_body calls Gecko's GetDocument that loads about:blank
> page in case no page is loaded and returns its body.
>
> - correct implementation
> get_body return S_OK and NULL if no page is loaded. However
> IniNew call initializes document so get_body will return a valid
> body object.
>
> The loading routine is the main problem with current MSHTML,
> but I'd expect it to be enough for your case.
>
> Thanks,
> Jacek
>
More information about the wine-devel
mailing list