On Fri Jan 26 16:05:26 2024 +0000, Gabriel Ivăncescu wrote:
Sorry, I've been having some difficulty understanding what you meant + testing it. For me, Windows crashes if I use the old doc_node from before document is loaded (even if I don't release it) but it *is different* in terms of raw pointer value, so doesn't that mean it gets "moved" as well? EDIT: Here's an example diff:
diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c index 1f3f4a1..ddeebee 100644 --- a/dlls/mshtml/tests/script.c +++ b/dlls/mshtml/tests/script.c @@ -4619,8 +4619,8 @@ static void test_exec_script(IHTMLDocument2 *doc, const WCHAR *codew, const WCHA static void test_simple_script(void) { + IHTMLDocument2 *doc_node, *doc_node2; IOleCommandTarget *cmdtarget; - IHTMLDocument2 *doc_node; IServiceProvider *sp; IHTMLWindow2 *window; IHTMLDocument6 *doc6; @@ -4735,13 +4735,12 @@ static void test_simple_script(void) hres = IHTMLDocument2_get_parentWindow(doc, &window); ok(hres == S_OK, "get_parentWindow failed: %08lx\n", hres); - hres = IHTMLWindow2_get_document(window, &doc_node); + hres = IHTMLWindow2_get_document(window, &doc_node2); ok(hres == S_OK, "get_document failed: %08lx\n", hres); IHTMLWindow2_Release(window); - hres = IHTMLDocument2_QueryInterface(doc_node, &IID_IServiceProvider, (void**)&sp); + hres = IHTMLDocument2_QueryInterface(doc_node2, &IID_IServiceProvider, (void**)&sp); ok(hres == S_OK, "Could not get IServiceProvider iface: %08lx\n", hres); - IHTMLDocument2_Release(doc_node); hres = IServiceProvider_QueryService(sp, &IID_IActiveScriptSite, &IID_IOleCommandTarget, (void**)&cmdtarget); ok(hres == S_OK, "QueryService(IID_IActiveScriptSite->IID_IOleCommandTarget) failed: %08lx\n", hres); @@ -4807,6 +4806,9 @@ static void test_simple_script(void) hres = IHTMLDocument2_QueryInterface(doc_node, &IID_IServiceProvider, (void**)&sp); ok(hres == S_OK, "Could not get IServiceProvider iface: %08lx\n", hres); + trace("doc_node %p, doc_node2 %p\n", doc_node, doc_node2); + ok(iface_cmp((IUnknown *)doc_node, (IUnknown *)doc_node2), "doc_node != doc_node2\n"); + IHTMLDocument2_Release(doc_node2); IHTMLDocument2_Release(doc_node); hres = IServiceProvider_QueryService(sp, &IID_IActiveScriptSite, &IID_IOleCommandTarget, (void**)&cmdtarget);
`iface_cmp` crashes though.
My main question was why do we care?