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

Reply via email to