From 9c9180f60677f05824e10f604952a95699dcf5cc Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Tue, 30 May 2017 23:05:56 +0100 Subject: [PATCH] wsdapi: Create default XML context in WSDCreateDiscoveryPublisher if required. Signed-off-by: Owen Rudge Signed-off-by: Alexandre Julliard --- dlls/wsdapi/discovery.c | 12 +++++++-- dlls/wsdapi/tests/discovery.c | 51 +++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/dlls/wsdapi/discovery.c b/dlls/wsdapi/discovery.c index ea0f34ba3fc..c9ef9c2a271 100644 --- a/dlls/wsdapi/discovery.c +++ b/dlls/wsdapi/discovery.c @@ -360,10 +360,18 @@ HRESULT WINAPI WSDCreateDiscoveryPublisher(IWSDXMLContext *pContext, IWSDiscover obj->IWSDiscoveryPublisher_iface.lpVtbl = &publisher_vtbl; obj->ref = 1; - obj->xmlContext = pContext; - if (pContext != NULL) + if (pContext == NULL) { + if (FAILED(WSDXMLCreateContext(&obj->xmlContext))) + { + WARN("Unable to create XML context\n"); + return E_OUTOFMEMORY; + } + } + else + { + obj->xmlContext = pContext; IWSDXMLContext_AddRef(pContext); } diff --git a/dlls/wsdapi/tests/discovery.c b/dlls/wsdapi/tests/discovery.c index ffe64b06338..db5947d6057 100644 --- a/dlls/wsdapi/tests/discovery.c +++ b/dlls/wsdapi/tests/discovery.c @@ -162,6 +162,56 @@ static void CreateDiscoveryPublisher_tests(void) ok(ref == 0, "IWSDiscoveryPublisher_Release() has %d references, should have 0\n", ref); } +static void CreateDiscoveryPublisher_XMLContext_tests(void) +{ + IWSDiscoveryPublisher *publisher = NULL; + IWSDXMLContext *xmlContext, *returnedContext; + HRESULT rc; + int ref; + + /* Test creating an XML context and supplying it to WSDCreateDiscoveryPublisher */ + rc = WSDXMLCreateContext(&xmlContext); + ok(rc == S_OK, "WSDXMLCreateContext failed: %08x\n", rc); + + rc = WSDCreateDiscoveryPublisher(xmlContext, &publisher); + ok(rc == S_OK, "WSDCreateDiscoveryPublisher(xmlContext, &publisher) failed: %08x\n", rc); + ok(publisher != NULL, "WSDCreateDiscoveryPublisher(xmlContext, &publisher) failed: publisher == NULL\n"); + + rc = IWSDiscoveryPublisher_GetXMLContext(publisher, NULL); + ok(rc == E_INVALIDARG, "GetXMLContext returned unexpected value with NULL argument: %08x\n", rc); + + rc = IWSDiscoveryPublisher_GetXMLContext(publisher, &returnedContext); + ok(rc == S_OK, "GetXMLContext failed: %08x\n", rc); + + ok(xmlContext == returnedContext, "GetXMLContext returned unexpected value: returnedContext == %p\n", returnedContext); + + ref = IWSDXMLContext_Release(returnedContext); + ok(ref == 2, "IWSDXMLContext_Release() has %d references, should have 2\n", ref); + + ref = IWSDiscoveryPublisher_Release(publisher); + ok(ref == 0, "IWSDiscoveryPublisher_Release() has %d references, should have 0\n", ref); + + ref = IWSDXMLContext_Release(returnedContext); + ok(ref == 0, "IWSDXMLContext_Release() has %d references, should have 0\n", ref); + + /* Test using a default XML context */ + publisher = NULL; + returnedContext = NULL; + + rc = WSDCreateDiscoveryPublisher(NULL, &publisher); + ok(rc == S_OK, "WSDCreateDiscoveryPublisher(NULL, &publisher) failed: %08x\n", rc); + ok(publisher != NULL, "WSDCreateDiscoveryPublisher(NULL, &publisher) failed: publisher == NULL\n"); + + rc = IWSDiscoveryPublisher_GetXMLContext(publisher, &returnedContext); + ok(rc == S_OK, "GetXMLContext failed: %08x\n", rc); + + ref = IWSDXMLContext_Release(returnedContext); + ok(ref == 1, "IWSDXMLContext_Release() has %d references, should have 1\n", ref); + + ref = IWSDiscoveryPublisher_Release(publisher); + ok(ref == 0, "IWSDiscoveryPublisher_Release() has %d references, should have 0\n", ref); +} + static void Publish_tests(void) { IWSDiscoveryPublisher *publisher = NULL; @@ -231,6 +281,7 @@ START_TEST(discovery) CoInitialize(NULL); CreateDiscoveryPublisher_tests(); + CreateDiscoveryPublisher_XMLContext_tests(); Publish_tests(); CoUninitialize();