Author: mnordell Date: Mon Sep 17 20:33:22 2012 New Revision: 57318
URL: http://svn.reactos.org/svn/reactos?rev=57318&view=rev Log: winetest addition that QueryInterface with NULL dest behaves as it should.
Added: trunk/rostests/winetests/msxml3/msxml3_ros.diff Modified: trunk/rostests/winetests/msxml3/domdoc.c
Modified: trunk/rostests/winetests/msxml3/domdoc.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msxml3/domdoc.c?... ============================================================================== --- trunk/rostests/winetests/msxml3/domdoc.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msxml3/domdoc.c [iso-8859-1] Mon Sep 17 20:33:22 2012 @@ -1447,6 +1447,9 @@ #define EXPECT_HR(hr,hr_exp) \ ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp)
+#define EXPECT_NOT_HR(hr,hr_exp) \ + ok(hr != hr_exp, "got 0x%08x, expected not 0x%08x\n", hr, hr_exp) + static const WCHAR szEmpty[] = { 0 }; static const WCHAR szIncomplete[] = { '<','?','x','m','l',' ', @@ -4244,6 +4247,30 @@ free_bstrs(); }
+/* + * This function is to display that xmlnodelist_QueryInterface + * generates SEGV for these conditions, and once fixed make sure + * it never does it again. + */ +static void verify_nodelist_query_interface(IXMLDOMNodeList *node_list) +{ + HRESULT hr; + /* + * NOTE: The following calls are supposed to test wine's + * xmlnodelist_QueryInterface behaving properly. + * While we should be able to expect E_POINTER (due to the NULL pointer), + * it seems MS' own implementation(s) violate the spec and return + * E_INVALIDARG. To not get cought be a potentially correct implementation + * in the future, we check for NOT S_OK. + */ + hr = IXMLDOMNodeList_QueryInterface(node_list, &IID_IUnknown, NULL); + EXPECT_NOT_HR(hr, S_OK); + hr = IXMLDOMNodeList_QueryInterface(node_list, &IID_IDispatch, NULL); + EXPECT_NOT_HR(hr, S_OK); + hr = IXMLDOMNodeList_QueryInterface(node_list, &IID_IXMLDOMNodeList, NULL); + EXPECT_NOT_HR(hr, S_OK); +} + static void test_get_childNodes(void) { IXMLDOMNodeList *node_list, *node_list2; @@ -4270,6 +4297,8 @@
hr = IXMLDOMElement_get_childNodes( element, &node_list ); EXPECT_HR(hr, S_OK); + + verify_nodelist_query_interface(node_list);
hr = IXMLDOMNodeList_get_length( node_list, &len ); EXPECT_HR(hr, S_OK);
Added: trunk/rostests/winetests/msxml3/msxml3_ros.diff URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msxml3/msxml3_ro... ============================================================================== --- trunk/rostests/winetests/msxml3/msxml3_ros.diff (added) +++ trunk/rostests/winetests/msxml3/msxml3_ros.diff [iso-8859-1] Mon Sep 17 20:33:22 2012 @@ -1,0 +1,54 @@ +Index: domdoc.c +=================================================================== +--- domdoc.c (revision 57310) ++++ domdoc.c (working copy) +@@ -1447,6 +1447,9 @@ + #define EXPECT_HR(hr,hr_exp) \ + ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp) + ++#define EXPECT_NOT_HR(hr,hr_exp) \ ++ ok(hr != hr_exp, "got 0x%08x, expected not 0x%08x\n", hr, hr_exp) ++ + static const WCHAR szEmpty[] = { 0 }; + static const WCHAR szIncomplete[] = { + '<','?','x','m','l',' ', +@@ -4244,6 +4247,30 @@ + free_bstrs(); + } + ++/* ++ * This function is to display that xmlnodelist_QueryInterface ++ * generates SEGV for these conditions, and once fixed make sure ++ * it never does it again. ++ */ ++static void verify_nodelist_query_interface(IXMLDOMNodeList *node_list) ++{ ++ HRESULT hr; ++ /* ++ * NOTE: The following calls are supposed to test wine's ++ * xmlnodelist_QueryInterface behaving properly. ++ * While we should be able to expect E_POINTER (due to the NULL pointer), ++ * it seems MS' own implementation(s) violate the spec and return ++ * E_INVALIDARG. To not get cought be a potentially correct implementation ++ * in the future, we check for NOT S_OK. ++ */ ++ hr = IXMLDOMNodeList_QueryInterface(node_list, &IID_IUnknown, NULL); ++ EXPECT_NOT_HR(hr, S_OK); ++ hr = IXMLDOMNodeList_QueryInterface(node_list, &IID_IDispatch, NULL); ++ EXPECT_NOT_HR(hr, S_OK); ++ hr = IXMLDOMNodeList_QueryInterface(node_list, &IID_IXMLDOMNodeList, NULL); ++ EXPECT_NOT_HR(hr, S_OK); ++} ++ + static void test_get_childNodes(void) + { + IXMLDOMNodeList *node_list, *node_list2; +@@ -4271,6 +4298,8 @@ + hr = IXMLDOMElement_get_childNodes( element, &node_list ); + EXPECT_HR(hr, S_OK); + ++ verify_nodelist_query_interface(node_list); ++ + hr = IXMLDOMNodeList_get_length( node_list, &len ); + EXPECT_HR(hr, S_OK); + ok( len == 4, "len %d\n", len);