Re: [1/3] msxml3/xsl: Basic put_input() method for IXSLProcessor (try2)
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
participants (1)
-
Joris Huizer