On Sat, Nov 03, 2018 at 06:07:17PM -0500, Zebediah Figura wrote:
Signed-off-by: Zebediah Figura z.figura12@gmail.com
dlls/rpcrt4/ndr_typelib.c | 180 +++++++++++++++++++++++++++++++++++++- 1 file changed, 179 insertions(+), 1 deletion(-)
diff --git a/dlls/rpcrt4/ndr_typelib.c b/dlls/rpcrt4/ndr_typelib.c index aa54db20e0..51e198d711 100644 --- a/dlls/rpcrt4/ndr_typelib.c +++ b/dlls/rpcrt4/ndr_typelib.c @@ -22,6 +22,7 @@ +static HRESULT write_iface_fs(ITypeInfo *typeinfo, WORD funcs,
unsigned char *type, size_t *typelen, unsigned char *proc,
size_t *proclen, unsigned short *offset)
+{
- unsigned short stack_offset;
- WORD proc_idx, param_idx;
- FUNCDESC *desc;
- HRESULT hr;
- for (proc_idx = 0; proc_idx < funcs; proc_idx++)
- {
TRACE("proc %d\n", proc_idx);
hr = ITypeInfo_GetFuncDesc(typeinfo, proc_idx, &desc);
if (FAILED(hr)) return hr;
if (offset)
offset[proc_idx] = *proclen;
write_proc_func_header(typeinfo, desc, proc_idx + 3, proc, proclen);
stack_offset = sizeof(void *); /* This */
for (param_idx = 0; param_idx < desc->cParams; param_idx++)
{
TRACE("param %d\n", param_idx);
hr = write_param_fs(typeinfo, type, typelen, proc, proclen,
&desc->lprgelemdescParam[param_idx], FALSE, &stack_offset);
if (FAILED(hr)) return hr;
You leak desc in the failure case here.
}
hr = write_param_fs(typeinfo, type, typelen, proc, proclen,
&desc->elemdescFunc, TRUE, &stack_offset);
if (FAILED(hr)) return hr;
Also here.
ITypeInfo_ReleaseFuncDesc(typeinfo, desc);
- }
- return S_OK;
+}