summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2015-11-19 18:06:28 +0000
committerJon Turney <jon.turney@dronecode.org.uk>2016-02-16 15:01:56 +0000
commitf7696d429d2d010015c174c9fe2d400b216566ca (patch)
tree63fa0029b9fbf9ca89a0d45a6d243037348e59f5
parent26d611ad55160e27807537592206ff57da105bb5 (diff)
Warn about too large Windows -> X clipboard pastes
XChangeProperty() requests larger than the ~16MB permitted even with BigReq will fail BadLength
-rw-r--r--hw/xwin/winclipboard/xevents.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/hw/xwin/winclipboard/xevents.c b/hw/xwin/winclipboard/xevents.c
index 4f7708762..a7c21b481 100644
--- a/hw/xwin/winclipboard/xevents.c
+++ b/hw/xwin/winclipboard/xevents.c
@@ -691,6 +691,24 @@ winClipboardFlushXEvents(HWND hwnd,
free(pszConvertData);
pszConvertData = NULL;
+ /* data will fit into a single X request (INCR not yet supported) */
+ {
+ long unsigned int maxreqsize = XExtendedMaxRequestSize(pDisplay);
+ if (maxreqsize == 0)
+ maxreqsize = XMaxRequestSize(pDisplay);
+
+ /* covert to bytes and allow for allow for X_ChangeProperty request */
+ maxreqsize = maxreqsize*4 - 24;
+
+ if (xtpText.nitems > maxreqsize) {
+ ErrorF("winClipboardFlushXEvents - clipboard data size %lu greater than maximum %lu\n", xtpText.nitems, maxreqsize);
+
+ /* Abort */
+ fAbort = TRUE;
+ goto winClipboardFlushXEvents_SelectionRequest_Done;
+ }
+ }
+
/* Copy the clipboard text to the requesting window */
iReturn = XChangeProperty(pDisplay,
event.xselectionrequest.requestor,