diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2015-11-19 18:06:28 +0000 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2016-02-16 15:01:56 +0000 |
commit | f7696d429d2d010015c174c9fe2d400b216566ca (patch) | |
tree | 63fa0029b9fbf9ca89a0d45a6d243037348e59f5 | |
parent | 26d611ad55160e27807537592206ff57da105bb5 (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.c | 18 |
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, |