]> source.dussan.org Git - tigervnc.git/commitdiff
Use std::string for connection info
authorPierre Ossman <ossman@cendio.se>
Mon, 18 Nov 2024 15:41:01 +0000 (16:41 +0100)
committerPierre Ossman <ossman@cendio.se>
Mon, 18 Nov 2024 15:41:01 +0000 (16:41 +0100)
Avoid truncation problems with the fixed size buffers.

vncviewer/CConn.cxx
vncviewer/CConn.h
vncviewer/Viewport.cxx

index 31f5321d442abe214d916d689253d4985e9a7bb0..f8e8042974e04fc2a02b1a0b7132bedb556a4104 100644 (file)
@@ -142,72 +142,53 @@ CConn::~CConn()
   delete sock;
 }
 
-const char *CConn::connectionInfo()
+std::string CConn::connectionInfo()
 {
-  static char infoText[1024] = "";
+  std::string infoText;
 
-  char scratch[100];
   char pfStr[100];
 
-  // Crude way of avoiding constant overflow checks
-  assert((sizeof(scratch) + 1) * 10 < sizeof(infoText));
+  infoText += format(_("Desktop name: %.80s"), server.name());
+  infoText += "\n";
 
-  infoText[0] = '\0';
+  infoText += format(_("Host: %.80s port: %d"),
+                     serverHost.c_str(), serverPort);
+  infoText += "\n";
 
-  snprintf(scratch, sizeof(scratch),
-           _("Desktop name: %.80s"), server.name());
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
-
-  snprintf(scratch, sizeof(scratch),
-           _("Host: %.80s port: %d"), serverHost.c_str(), serverPort);
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
-
-  snprintf(scratch, sizeof(scratch),
-           _("Size: %d x %d"), server.width(), server.height());
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
+  infoText += format(_("Size: %d x %d"),
+                     server.width(), server.height());
+  infoText += "\n";
 
   // TRANSLATORS: Will be filled in with a string describing the
   // protocol pixel format in a fairly language neutral way
   server.pf().print(pfStr, 100);
-  snprintf(scratch, sizeof(scratch),
-           _("Pixel format: %s"), pfStr);
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
+  infoText += format(_("Pixel format: %s"), pfStr);
+  infoText += "\n";
 
   // TRANSLATORS: Similar to the earlier "Pixel format" string
   serverPF.print(pfStr, 100);
-  snprintf(scratch, sizeof(scratch),
-           _("(server default %s)"), pfStr);
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
-
-  snprintf(scratch, sizeof(scratch),
-           _("Requested encoding: %s"), encodingName(getPreferredEncoding()));
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
-
-  snprintf(scratch, sizeof(scratch),
-           _("Last used encoding: %s"), encodingName(lastServerEncoding));
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
-
-  snprintf(scratch, sizeof(scratch),
-           _("Line speed estimate: %d kbit/s"), (int)(bpsEstimate/1000));
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
-
-  snprintf(scratch, sizeof(scratch),
-           _("Protocol version: %d.%d"), server.majorVersion, server.minorVersion);
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
-
-  snprintf(scratch, sizeof(scratch),
-           _("Security method: %s"), secTypeName(csecurity->getType()));
-  strcat(infoText, scratch);
-  strcat(infoText, "\n");
+  infoText += format(_("(server default %s)"), pfStr);
+  infoText += "\n";
+
+  infoText += format(_("Requested encoding: %s"),
+                     encodingName(getPreferredEncoding()));
+  infoText += "\n";
+
+  infoText += format(_("Last used encoding: %s"),
+                     encodingName(lastServerEncoding));
+  infoText += "\n";
+
+  infoText += format(_("Line speed estimate: %d kbit/s"),
+                     (int)(bpsEstimate / 1000));
+  infoText += "\n";
+
+  infoText += format(_("Protocol version: %d.%d"),
+                     server.majorVersion, server.minorVersion);
+  infoText += "\n";
+
+  infoText += format(_("Security method: %s"),
+                     secTypeName(csecurity->getType()));
+  infoText += "\n";
 
   return infoText;
 }
index 1e71be94c2465a2a1ef73f3e8c59ad64a18ef418..a7b9afdaf7a3c80fe05db0df93e92b961a698df3 100644 (file)
@@ -36,7 +36,7 @@ public:
   CConn(const char* vncServerName, network::Socket* sock);
   ~CConn();
 
-  const char *connectionInfo();
+  std::string connectionInfo();
 
   unsigned getUpdateCount();
   unsigned getPixelCount();
index 6869279cf5d97d983ce8914398d08b502f7f63f3..219bb57e30f5a57adc264725b95c479e75e9dfaf 100644 (file)
@@ -1385,7 +1385,8 @@ void Viewport::popupContextMenu()
     OptionsDialog::showDialog();
     break;
   case ID_INFO:
-    if (fltk_escape(cc->connectionInfo(), buffer, sizeof(buffer)) < sizeof(buffer)) {
+    if (fltk_escape(cc->connectionInfo().c_str(),
+                    buffer, sizeof(buffer)) < sizeof(buffer)) {
       fl_message_title(_("VNC connection info"));
       fl_message("%s", buffer);
     }