Module: wine Branch: master Commit: d382b8e91a4516811b9c6b0d85b3d132bec6ea2f URL: http://source.winehq.org/git/wine.git/?a=commit;h=d382b8e91a4516811b9c6b0d85... Author: Marcus Meissner <marcus(a)jet.franken.de> Date: Sun Nov 5 23:07:05 2017 +0100 ole32: Clipboard format in the datacache is with trailing \0. GetClipboardFormatName returns length without terminating 0, but we need to store it with \0. Signed-off-by: Marcus Meissner <marcus(a)jet.franken.de> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ole32/datacache.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dlls/ole32/datacache.c b/dlls/ole32/datacache.c index 2907426..48453b4 100644 --- a/dlls/ole32/datacache.c +++ b/dlls/ole32/datacache.c @@ -470,6 +470,10 @@ static HRESULT read_clipformat(IStream *stream, CLIPFORMAT *clipformat) hr = IStream_Read(stream, &length, sizeof(length), &read); if (hr != S_OK || read != sizeof(length)) return DV_E_CLIPFORMAT; + if (!length) { + /* No clipboard format present */ + return S_OK; + } if (length == -1) { DWORD cf; @@ -499,11 +503,16 @@ static HRESULT write_clipformat(IStream *stream, CLIPFORMAT clipformat) { DWORD length; HRESULT hr; + char format_name[256]; if (clipformat < 0xc000) length = -1; else - length = GetClipboardFormatNameA(clipformat, NULL, 0); + { + length = GetClipboardFormatNameA(clipformat, format_name, sizeof(format_name)); + /* If there is a clipboard format name, we need to include its terminating \0 */ + if (length) length++; + } hr = IStream_Write(stream, &length, sizeof(length), NULL); if (FAILED(hr)) return hr; @@ -514,12 +523,7 @@ static HRESULT write_clipformat(IStream *stream, CLIPFORMAT clipformat) } else { - char *format_name = HeapAlloc(GetProcessHeap(), 0, length); - if (!format_name) - return E_OUTOFMEMORY; - GetClipboardFormatNameA(clipformat, format_name, length); hr = IStream_Write(stream, format_name, length, NULL); - HeapFree(GetProcessHeap(), 0, format_name); } return hr; }