From 812fcd6a3ef27c95352e65726e9411f208198f1f Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Sat, 6 Mar 2010 08:56:21 +0000 Subject: [PATCH] [MSXML3] sync msxml3 to wine 1.1.40 svn path=/trunk/; revision=45908 --- reactos/dll/win32/msxml3/domdoc.c | 5 ++++- reactos/dll/win32/msxml3/element.c | 28 ++++++++++------------------ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/reactos/dll/win32/msxml3/domdoc.c b/reactos/dll/win32/msxml3/domdoc.c index 41c1f417642..a29e9b2fb3e 100644 --- a/reactos/dll/win32/msxml3/domdoc.c +++ b/reactos/dll/win32/msxml3/domdoc.c @@ -2214,7 +2214,7 @@ static ULONG WINAPI xmldoc_Safety_Release(IObjectSafety *iface) return IXMLDocument_Release((IXMLDocument *)This); } -#define SAFETY_SUPPORTED_OPTIONS (INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA) +#define SAFETY_SUPPORTED_OPTIONS (INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_SECURITY_MANAGER) static HRESULT WINAPI xmldoc_Safety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions) @@ -2238,6 +2238,9 @@ static HRESULT WINAPI xmldoc_Safety_SetInterfaceSafetyOptions(IObjectSafety *ifa domdoc *This = impl_from_IObjectSafety(iface); TRACE("(%p)->(%s %x %x)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions); + if ((dwOptionSetMask & ~SAFETY_SUPPORTED_OPTIONS) != 0) + return E_FAIL; + This->safeopt = dwEnabledOptions & dwOptionSetMask & SAFETY_SUPPORTED_OPTIONS; return S_OK; } diff --git a/reactos/dll/win32/msxml3/element.c b/reactos/dll/win32/msxml3/element.c index 01547709b7b..b6caf73df15 100644 --- a/reactos/dll/win32/msxml3/element.c +++ b/reactos/dll/win32/msxml3/element.c @@ -489,32 +489,24 @@ static HRESULT WINAPI domelem_get_tagName( { domelem *This = impl_from_IXMLDOMElement( iface ); xmlNodePtr element; - DWORD len; - DWORD offset = 0; - LPWSTR str; + const xmlChar *prefix; + xmlChar *qname; TRACE("(%p)->(%p)\n", This, p ); + if (!p) return E_INVALIDARG; + element = get_element( This ); if ( !element ) return E_FAIL; - len = MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->name, -1, NULL, 0 ); - if (element->ns) - len += MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->ns->prefix, -1, NULL, 0 ); - str = heap_alloc( len * sizeof (WCHAR) ); - if ( !str ) - return E_OUTOFMEMORY; - if (element->ns) - { - offset = MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->ns->prefix, -1, str, len ); - str[offset - 1] = ':'; - } - MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) element->name, -1, str + offset, len - offset ); - *p = SysAllocString( str ); - heap_free( str ); + prefix = element->ns ? element->ns->prefix : NULL; + qname = xmlBuildQName(element->name, prefix, NULL, 0); - return S_OK; + *p = bstr_from_xmlChar(qname); + if (qname != element->name) xmlFree(qname); + + return *p ? S_OK : E_OUTOFMEMORY; } static HRESULT WINAPI domelem_getAttribute( -- 2.17.1