[1/3] msxml3/xsl: Basic put_input() method for IXSLProcessor (try2)

Joris Huizer joris_huizer at yahoo.com
Wed Feb 16 07:23:35 CST 2011


Hello,

I think I found a (possible) little issue in the patch:

If one would pass a VARIANT of incorrect type to the xslprocessor_put_input() function (say type BSTR), the first type checks fail and leave hr uninitialised; in case it happened to have the value S_OK the other if block is skipped - assigning the uninitialised input_node; 


 static HRESULT WINAPI xslprocessor_put_input( IXSLProcessor *iface, VARIANT input )
 {
     xslprocessor *This = impl_from_IXSLProcessor( iface );
+    IXMLDOMNode *input_node;
+    HRESULT hr;
(assume hr happens to be S_OK)

-    FIXME("(%p): stub\n", This);
-    return E_NOTIMPL;
+    TRACE("(%p)->(%s)\n", This, debugstr_variant(&input));
+
+    /* try IXMLDOMNode directly first */
+    if (V_VT(&input) == VT_UNKNOWN)
+        hr = IUnknown_QueryInterface(V_UNKNOWN(&input), &IID_IXMLDOMNode, (void**)&input_node);
+    else if (V_VT(&input) == VT_DISPATCH)
+        hr = IDispatch_QueryInterface(V_DISPATCH(&input), &IID_IXMLDOMNode, (void**)&input_node);
(both false)

+
+    if (hr != S_OK)
+    {
//...
+    }
(skipped)

+
+    if (hr == S_OK)
+    {
+        if (This->input) IXMLDOMNode_Release(This->input);
+        This->input = input_node;
+    }
(executed, assigning garbage to This->input)

+
+    return hr;
 }
 
HTH,
Joris


      



More information about the wine-devel mailing list