From ba018b52539aa594204c9234eb6c04196852ac78 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 17 Mar 2017 08:23:57 +0300 Subject: [PATCH] msxml3/saxreader: Handle NULL interface input in parse(). Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/msxml3/saxreader.c | 3 +++ dlls/msxml3/tests/saxreader.c | 10 ++++++++++ 2 files changed, 13 insertions(+) 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;