msxml3: Treat input BSTR as general WCHAR string for ::loadXML().
This commit is contained in:
parent
b1b54ae39f
commit
2060d80d24
|
@ -1650,19 +1650,20 @@ static HRESULT WINAPI domdoc_abort(
|
|||
|
||||
static BOOL bstr_to_utf8( BSTR bstr, char **pstr, int *plen )
|
||||
{
|
||||
UINT len, blen = SysStringLen( bstr );
|
||||
UINT len;
|
||||
LPSTR str;
|
||||
|
||||
len = WideCharToMultiByte( CP_UTF8, 0, bstr, blen, NULL, 0, NULL, NULL );
|
||||
len = WideCharToMultiByte( CP_UTF8, 0, bstr, -1, NULL, 0, NULL, NULL );
|
||||
str = heap_alloc( len );
|
||||
if ( !str )
|
||||
return FALSE;
|
||||
WideCharToMultiByte( CP_UTF8, 0, bstr, blen, str, len, NULL, NULL );
|
||||
WideCharToMultiByte( CP_UTF8, 0, bstr, -1, str, len, NULL, NULL );
|
||||
*plen = len;
|
||||
*pstr = str;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* don't rely on data to be in BSTR format, treat it as WCHAR string */
|
||||
static HRESULT WINAPI domdoc_loadXML(
|
||||
IXMLDOMDocument2 *iface,
|
||||
BSTR bstrXML,
|
||||
|
|
|
@ -535,6 +535,7 @@ static void test_domdoc( void )
|
|||
BSTR str;
|
||||
LONG code;
|
||||
LONG nLength = 0;
|
||||
WCHAR buff[100];
|
||||
|
||||
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
|
||||
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
|
||||
|
@ -543,6 +544,12 @@ static void test_domdoc( void )
|
|||
|
||||
test_disp((IUnknown*)doc);
|
||||
|
||||
if (0)
|
||||
{
|
||||
/* crashes on native */
|
||||
r = IXMLDOMDocument_loadXML( doc, (BSTR)0x1, NULL );
|
||||
}
|
||||
|
||||
/* try some stupid things */
|
||||
r = IXMLDOMDocument_loadXML( doc, NULL, NULL );
|
||||
ok( r == S_FALSE, "loadXML failed\n");
|
||||
|
@ -601,6 +608,15 @@ static void test_domdoc( void )
|
|||
ok( r == S_FALSE, "should be no document element\n");
|
||||
ok( element == NULL, "Element should be NULL\n");
|
||||
|
||||
/* test for BSTR handling, pass broken BSTR */
|
||||
memcpy(&buff[2], szComplete1, sizeof(szComplete1));
|
||||
/* just a big length */
|
||||
*(DWORD*)buff = 0xf0f0;
|
||||
b = VARIANT_FALSE;
|
||||
r = IXMLDOMDocument_loadXML( doc, &buff[2], &b );
|
||||
ok( r == S_OK, "loadXML failed\n");
|
||||
ok( b == VARIANT_TRUE, "failed to load XML string\n");
|
||||
|
||||
/* try to load something valid */
|
||||
b = VARIANT_FALSE;
|
||||
str = SysAllocString( szComplete1 );
|
||||
|
|
Loading…
Reference in New Issue