Nikolay Sivov (@nsivov) commented about dlls/combase/usrmarshal.c:
- wire = ALIGNED_POINTER(buf, 7);
- if (LOWORD(*flags) == MSHCTX_INPROC)
- {
*str = wire->hstring.str;
TRACE("str=%s\n", debugstr_hstring(*str));
buf = (BYTE *)(&wire->hstring.str + 1);
- }
- else
- {
UINT32 len;
HRESULT hr;
len = wire->buf.size/sizeof(WCHAR);
hr = WindowsCreateString(wire->buf.data, len, str);
if (FAILED(hr))
RpcRaiseException(HRESULT_CODE(hr));
What we do in other place is already inconsistent, but I think it makes sense to return RPC_S_OUT_OF_MEMORY on any failure. Unless there is an easy way to verify manually, like calling with null out argument.