From: Thomas Faller Subject: [PATCH] winex11.drv: fix use of uninitialized memory Message-Id: <56046EB1.6070403@gmx.de> Date: Thu, 24 Sep 2015 23:44:17 +0200 Fix for https://bugs.winehq.org/show_bug.cgi?id=38728 --- dlls/winex11.drv/clipboard.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c index 6c6b3b9..eb155e6 100644 --- a/dlls/winex11.drv/clipboard.c +++ b/dlls/winex11.drv/clipboard.c @@ -367,8 +367,19 @@ static void intern_atoms(void) i = 0; LIST_FOR_EACH_ENTRY( format, &format_list, WINE_CLIPFORMAT, entry ) if (!format->drvData) { - GetClipboardFormatNameW( format->wFormatID, buffer, 256 ); - len = WideCharToMultiByte(CP_UNIXCP, 0, buffer, -1, NULL, 0, NULL, NULL); + if (GetClipboardFormatNameW(format->wFormatID, buffer, 256) > 0) + { + /* use defined format name */ + len = WideCharToMultiByte(CP_UNIXCP, 0, buffer, -1, NULL, 0, NULL, NULL); + } + else + { + /* create a name in the same way as ntdll/atom.c:integral_atom_name + * which is normally used by GetClipboardFormatNameW + */ + static const WCHAR fmt[] = {'#','%','u',0}; + len = sprintfW(buffer, fmt, format->wFormatID) + 1; + } names[i] = HeapAlloc(GetProcessHeap(), 0, len); WideCharToMultiByte(CP_UNIXCP, 0, buffer, -1, names[i++], len, NULL, NULL); }