Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51267 Signed-off-by: Jefferson Carpenter jeffersoncarpenter2@gmail.com --- Considered adding IVBSAXXMLReader_parseURL to test_saxreader() instead of adding the function test_vb_saxreader() but ran into two problems: 1) ISAXXMLReader sometimes cannot be queried for IVBSAXXMLReader and 2) the EXPECT_REF lines in contentHandler_putDocumentLocator would need to be incremented to account for the additional reference. --- dlls/msxml3/saxreader.c | 2 ++ dlls/msxml3/tests/saxreader.c | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index c610ffcaccb..eadf8e0c631 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -2739,6 +2739,8 @@ static HRESULT internal_parseURL(
TRACE("(%p)->(%s)\n", This, debugstr_w(url));
+ if (!url) return E_INVALIDARG; + hr = create_moniker_from_url(url, &mon); if(FAILED(hr)) return hr; diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index ad093af6a12..7fda64f9776 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2325,6 +2325,13 @@ static void test_saxreader(void) WriteFile(file, testXML, sizeof(testXML)-1, &written, NULL); CloseHandle(file);
+ /* crashes on new versions */ + if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader) || + IsEqualGUID(table->clsid, &CLSID_SAXXMLReader30)) { + hr = ISAXXMLReader_parseURL(reader, NULL); + EXPECT_HR(hr, E_INVALIDARG); + } + if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader40) || IsEqualGUID(table->clsid, &CLSID_SAXXMLReader60)) test_seq = content_handler_test1_alternate; @@ -2561,6 +2568,34 @@ static void test_saxreader(void) free_bstrs(); }
+static void test_vb_saxreader(void) +{ + const struct msxmlsupported_data_t *table = reader_support_data; + HRESULT hr; + IVBSAXXMLReader *reader = NULL; + + while (table->clsid) + { + if (!is_clsid_supported(table->clsid, reader_support_data)) + { + table++; + continue; + } + + hr = CoCreateInstance(table->clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IVBSAXXMLReader, (void**)&reader); + EXPECT_HR(hr, S_OK); + + /* crashes on new versions */ + if (IsEqualGUID(table->clsid, &CLSID_SAXXMLReader) || + IsEqualGUID(table->clsid, &CLSID_SAXXMLReader30)) { + hr = IVBSAXXMLReader_parseURL(reader, NULL); + EXPECT_HR(hr, E_INVALIDARG); + } + + table++; + } +} + struct saxreader_props_test_t { const char *prop_name; @@ -6019,6 +6054,7 @@ START_TEST(saxreader) get_class_support_data(reader_support_data, &IID_ISAXXMLReader);
test_saxreader(); + test_vb_saxreader(); test_saxreader_properties(); test_saxreader_features(); test_saxreader_encoding();