[PATCH] winex11.drv: fix use of uninitialized memory

Thomas Faller tfaller1 at gmx.de
Thu Sep 24 16:44:17 CDT 2015


Fix for https://bugs.winehq.org/show_bug.cgi?id=38728

---
  dlls/winex11.drv/clipboard.c | 15 +++++++++++++--
  1 file changed, 13 insertions(+), 2 deletions(-)

-------------- next part --------------
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);
         }



More information about the wine-patches mailing list