From bb1276425f8ee475e9057ac8ab7513bf9c03f48c Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Thu, 31 Aug 2006 17:21:13 +0100 Subject: [PATCH] ole32: Allocate memory for a copy of the ptd member of FORMATETC in DataAdviseHolder_Advise since there is no requirement for the application to keep this memory valid for the lifetime of the connection. --- dlls/ole32/oleobj.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dlls/ole32/oleobj.c b/dlls/ole32/oleobj.c index ae06f18935d..a7470e438ba 100644 --- a/dlls/ole32/oleobj.c +++ b/dlls/ole32/oleobj.c @@ -723,8 +723,18 @@ static HRESULT WINAPI DataAdviseHolder_Advise( * Store the new sink */ This->Connections[index].sink = pAdvise; - memcpy(&(This->Connections[index].fmat), pFetc, sizeof(FORMATETC)); This->Connections[index].advf = advf & ~WINE_ADVF_REMOTE; + memcpy(&(This->Connections[index].fmat), pFetc, sizeof(FORMATETC)); + if (pFetc->ptd) + { + This->Connections[index].fmat.ptd = CoTaskMemAlloc(pFetc->ptd->tdSize); + if (!This->Connections[index].fmat.ptd) + { + IDataAdviseHolder_Unadvise(iface, index + 1); + return E_OUTOFMEMORY; + } + memcpy(This->Connections[index].fmat.ptd, pFetc->ptd, pFetc->ptd->tdSize); + } if (This->Connections[index].sink != NULL) { IAdviseSink_AddRef(This->Connections[index].sink);