Revision: 4454
http://tigervnc.svn.sourceforge.net/tigervnc/?rev=4454&view=rev
Author: ossman_
Date: 2011-05-26 15:39:41 +0000 (Thu, 26 May 2011)
Log Message:
-----------
Make sure we can handle clipboard data of any size.
Modified Paths:
--------------
trunk/vncviewer/CConn.cxx
trunk/vncviewer/Viewport.cxx
Modified: trunk/vncviewer/CConn.cxx
===================================================================
--- trunk/vncviewer/CConn.cxx 2011-05-26 14:59:32 UTC (rev 4453)
+++ trunk/vncviewer/CConn.cxx 2011-05-26 15:39:41 UTC (rev 4454)
@@ -339,18 +339,25 @@
void CConn::serverCutText(const char* str, rdr::U32 len)
{
- char buffer[1024];
- int ret;
+ char *buffer;
+ int size, ret;
- ret = fl_utf8froma(buffer, sizeof(buffer), str, len);
- if (ret >= sizeof(buffer)) {
- vlog.error(_("Clipboard buffer overflow!"));
+ size = fl_utf8froma(NULL, 0, str, len);
+ if (size <= 0)
return;
- }
+ size++;
+
+ buffer = new char[size];
+
+ ret = fl_utf8froma(buffer, size, str, len);
+ assert(ret < size);
+
vlog.debug("Got clipboard data: '%s'", buffer);
Fl::copy(buffer, ret, 1);
+
+ delete [] buffer;
}
// We start timing on beginRect and stop timing on endRect, to
Modified: trunk/vncviewer/Viewport.cxx
===================================================================
--- trunk/vncviewer/Viewport.cxx 2011-05-26 14:59:32 UTC (rev 4453)
+++ trunk/vncviewer/Viewport.cxx 2011-05-26 15:39:41 UTC (rev 4454)
@@ -192,22 +192,27 @@
int Viewport::handle(int event)
{
- char buffer[1024];
+ char *buffer;
int ret;
int buttonMask, wheelMask;
DownMap::const_iterator iter;
switch (event) {
case FL_PASTE:
+ buffer = new char[Fl::event_length() + 1];
+
// This is documented as to ASCII, but actually does to 8859-1
- ret = fl_utf8toa(Fl::event_text(), Fl::event_length(), buffer,
sizeof(buffer));
- if (ret >= sizeof(buffer)) {
- vlog.error(_("Clipboard buffer overflow!"));
- return 1;
- }
+ ret = fl_utf8toa(Fl::event_text(), Fl::event_length(), buffer,
+ Fl::event_length() + 1);
+ assert(ret < (Fl::event_length() + 1));
+
vlog.debug("Sending clipboard data: '%s'", buffer);
cc->writer()->clientCutText(buffer, ret);
+
+ delete [] buffer;
+
return 1;
+
case FL_ENTER:
// Yes, we would like some pointer events please!
return 1;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery,
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now.
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Tigervnc-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tigervnc-commits