Handle case when data type is not registered.
diff --git a/dlls/x11drv/event.c b/dlls/x11drv/event.c
index 29685ed..f2d728a 100644
--- a/dlls/x11drv/event.c
+++ b/dlls/x11drv/event.c
@@ -578,13 +578,13 @@
* EVENT_SelectionRequest_AddTARGETS
* Utility function for EVENT_SelectionRequest_TARGETS.
*/
-static void EVENT_SelectionRequest_AddTARGETS(Atom* targets, unsigned long* cTargets, Atom prop)
+static BOOL EVENT_SelectionRequest_AddTARGETS(Atom* targets, unsigned long cTargets, Atom prop)
{
int i;
BOOL bExists;
/* Scan through what we have so far to avoid duplicates */
- for (i = 0, bExists = FALSE; i < *cTargets; i++)
+ for (i = 0, bExists = FALSE; i < cTargets; i++)
{
if (targets[i] == prop)
{
@@ -594,7 +594,9 @@
}
if (!bExists)
- targets[(*cTargets)++] = prop;
+ targets[cTargets] = prop;
+
+ return !bExists;
}
@@ -613,7 +615,7 @@
/*
* Count the number of items we wish to expose as selection targets.
- * We include the TARGETS item, and propery aliases
+ * We include the TARGETS item, and property aliases
*/
cTargets = X11DRV_CountClipboardFormats() + 1;
@@ -629,6 +631,7 @@
if (X11DRV_CLIPBOARD_LookupPropertyAlias(lpFormat->drvData))
cTargets++;
}
+ /* else most likely unregistered format such as CF_PRIVATE or CF_GDIOBJ */
}
TRACE_(clipboard)(" found %ld formats\n", cTargets);
@@ -644,13 +647,22 @@
{
lpFormat = X11DRV_CLIPBOARD_LookupFormat(wFormat);
- if (lpFormat->lpDrvExportFunc)
- EVENT_SelectionRequest_AddTARGETS(targets, &cTargets, lpFormat->drvData);
+ if (lpFormat)
+ {
+ if (lpFormat->lpDrvExportFunc)
+ {
+ if (EVENT_SelectionRequest_AddTARGETS(targets, cTargets, lpFormat->drvData))
+ cTargets++;
+ }
- /* Check if any alias should be listed */
- alias = X11DRV_CLIPBOARD_LookupPropertyAlias(lpFormat->drvData);
- if (alias)
- EVENT_SelectionRequest_AddTARGETS(targets, &cTargets, alias);
+ /* Check if any alias should be listed */
+ alias = X11DRV_CLIPBOARD_LookupPropertyAlias(lpFormat->drvData);
+ if (alias)
+ {
+ if (EVENT_SelectionRequest_AddTARGETS(targets, cTargets, alias))
+ cTargets++;
+ }
+ }
}
wine_tsx11_lock();