From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/saxreader.c | 13 +++++++++++++ dlls/msxml3/tests/saxreader.c | 3 --- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 801106e3a07..75e44ca68a2 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -194,6 +194,7 @@ typedef struct struct bstrpool pool; saxreader_feature features; BSTR xmldecl_version; + BSTR empty_bstr; MSXML_VERSION version; } saxreader; @@ -1573,14 +1574,19 @@ static void libxmlStartElementNS( uri = local = NULL; if (This->vbInterface) + { + if (!uri) uri = This->saxreader->empty_bstr; hr = IVBSAXContentHandler_startElement(handler->vbhandler, &uri, &local, &element->qname, &This->IVBSAXAttributes_iface); + } else + { hr = ISAXContentHandler_startElement(handler->handler, uri ? uri : &empty_str, SysStringLen(uri), local ? local : &empty_str, SysStringLen(local), element->qname, SysStringLen(element->qname), &This->ISAXAttributes_iface); + } if (sax_callback_failed(This, hr)) format_error_message_from_id(This, hr); @@ -1645,15 +1651,20 @@ static void libxmlEndElementNS( uri = local = NULL; if (This->vbInterface) + { + if (!uri) uri = This->saxreader->empty_bstr; hr = IVBSAXContentHandler_endElement( handler->vbhandler, &uri, &local, &element->qname); + } else + { hr = ISAXContentHandler_endElement( handler->handler, uri ? uri : &empty_str, SysStringLen(uri), local ? local : &empty_str, SysStringLen(local), element->qname, SysStringLen(element->qname)); + } free_attribute_values(This); This->attr_count = 0; @@ -2922,6 +2933,7 @@ static ULONG WINAPI saxxmlreader_Release( } SysFreeString(reader->xmldecl_version); + SysFreeString(reader->empty_bstr); free_bstr_pool(&reader->pool); free(reader); @@ -3439,6 +3451,7 @@ HRESULT SAXXMLReader_create(MSXML_VERSION version, LPVOID *ppObj) reader->pool.len = 0; reader->features = Namespaces | NamespacePrefixes; reader->version = version; + reader->empty_bstr = SysAllocString(L""); init_dispex(&reader->dispex, (IUnknown*)&reader->IVBSAXXMLReader_iface, &saxreader_dispex); diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index f7a81e70244..327b823621d 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -135,7 +135,6 @@ static HRESULT WINAPI vb_content_handler_endPrefixMapping(IVBSAXContentHandler * static HRESULT WINAPI vb_content_handler_startElement(IVBSAXContentHandler *iface, BSTR *uri, BSTR *localName, BSTR *qname, IVBSAXAttributes * oAttributes) { - todo_wine ok(uri != NULL && *uri != NULL, "Unexpected pointer.\n"); ok(localName != NULL && *localName != NULL, "Unexpected pointer.\n"); ok(qname != NULL && *qname != NULL, "Unexpected pointer.\n"); @@ -6028,7 +6027,6 @@ static void test_mxwriter_from_reader(void) V_VT(&var) = VT_BSTR; V_BSTR(&var) = _bstr_("<a>text</a>"); hr = IVBSAXXMLReader_parse(reader, var); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); VariantClear(&var); @@ -6036,7 +6034,6 @@ static void test_mxwriter_from_reader(void) hr = IMXWriter_get_output(writer, &var); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(V_VT(&var) == VT_BSTR, "Unexpected output type %d.\n", V_VT(&var)); - todo_wine ok(!lstrcmpW(L"<a>text</a>", V_BSTR(&var)), "Unexpected content %s.\n", wine_dbgstr_w(V_BSTR(&var))); VariantClear(&var); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10031