diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 82241ad289d..0549bc82ebe 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -2664,6 +2664,9 @@ static HRESULT internal_parse( ISequentialStream *stream = NULL; IXMLDOMDocument *xmlDoc; + if (!V_UNKNOWN(&varInput)) + return E_INVALIDARG; + if(IUnknown_QueryInterface(V_UNKNOWN(&varInput), &IID_IXMLDOMDocument, (void**)&xmlDoc) == S_OK) { diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index cabca9d85cd..34d11e6f22d 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2221,6 +2221,16 @@ static void test_saxreader(void) SafeArrayDestroy(sa); + V_VT(&var) = VT_UNKNOWN; + V_UNKNOWN(&var) = NULL; + hr = ISAXXMLReader_parse(reader, var); + ok(hr == E_INVALIDARG, "got %#x\n", hr); + + V_VT(&var) = VT_DISPATCH; + V_DISPATCH(&var) = NULL; + hr = ISAXXMLReader_parse(reader, var); + ok(hr == E_INVALIDARG, "got %#x\n", hr); + stream = create_test_stream(testXML, -1); V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown*)stream;