[PATCH v2 resend] msxml3: Null check url in parseURL.

Jefferson Carpenter jeffersoncarpenter2 at gmail.com
Thu Oct 21 07:39:39 CDT 2021


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.
-------------- next part --------------
From 092d677bd13eb3f45b35092a13d51a2c3c763d5e Mon Sep 17 00:00:00 2001
From: Jefferson Carpenter <jeffersoncarpenter2 at gmail.com>
Date: Thu, 21 Oct 2021 07:16:13 +0000
Subject: [PATCH] msxml3: Null check url in parseURL.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51267
Signed-off-by: Jefferson Carpenter <jeffersoncarpenter2 at gmail.com>
---
 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();
-- 
2.26.2



More information about the wine-devel mailing list