]> source.dussan.org Git - tigervnc.git/commitdiff
Replace rfb::strDup by safe_strdup and remove rfb::strFree in favor of free()
authorAdam Tkac <atkac@redhat.com>
Fri, 4 Sep 2009 10:16:58 +0000 (10:16 +0000)
committerAdam Tkac <atkac@redhat.com>
Fri, 4 Sep 2009 10:16:58 +0000 (10:16 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3889 3789f03b-4d11-0410-bbf8-ca57d06f2519

23 files changed:
common/network/TcpSocket.cxx
common/rfb/Blacklist.cxx
common/rfb/CConnection.cxx
common/rfb/CConnection.h
common/rfb/Configuration.cxx
common/rfb/ConnParams.cxx
common/rfb/HTTPServer.cxx
common/rfb/Hostname.h
common/rfb/ListConnInfo.h
common/rfb/Logger_file.cxx
common/rfb/VNCSConnectionST.cxx
common/rfb/VNCServerST.cxx
common/rfb/secTypes.cxx
common/rfb/util.cxx
common/rfb/util.h
unix/tx/TXButton.h
unix/tx/TXLabel.h
unix/tx/TXMenu.cxx
unix/tx/TXWindow.cxx
unix/vncviewer/CConn.cxx
unix/vncviewer/vncviewer.cxx
unix/x0vncserver/x0vncserver.cxx
unix/xserver/hw/vnc/XserverDesktop.cc

index 7ceff0b002514da6618050ead4fd697f81ba015b..7056a0808f56f532867c76b3a892246d244cfbb4 100644 (file)
@@ -238,9 +238,9 @@ char* TcpSocket::getMyAddress() {
 
   char* name = inet_ntoa(addr);
   if (name) {
-    return rfb::strDup(name);
+    return safe_strdup(name);
   } else {
-    return rfb::strDup("");
+    return safe_strdup("");
   }
 }
 
@@ -268,9 +268,9 @@ char* TcpSocket::getPeerAddress() {
 
   char* name = inet_ntoa(addr);
   if (name) {
-    return rfb::strDup(name);
+    return safe_strdup(name);
   } else {
-    return rfb::strDup("");
+    return safe_strdup("");
   }
 }
 
@@ -451,7 +451,7 @@ int TcpListener::getMyPort() {
 
 TcpFilter::TcpFilter(const char* spec) {
   rfb::CharArray tmp;
-  tmp.buf = rfb::strDup(spec);
+  tmp.buf = safe_strdup(spec);
   while (tmp.buf) {
     rfb::CharArray first;
     rfb::strSplit(tmp.buf, ',', &first.buf, &tmp.buf);
@@ -541,9 +541,9 @@ char* TcpFilter::patternToStr(const TcpFilter::Pattern& p) {
   in_addr tmp;
   rfb::CharArray addr, mask;
   tmp.s_addr = p.address;
-  addr.buf = rfb::strDup(inet_ntoa(tmp));
+  addr.buf = safe_strdup(inet_ntoa(tmp));
   tmp.s_addr = p.mask;
-  mask.buf = rfb::strDup(inet_ntoa(tmp));
+  mask.buf = safe_strdup(inet_ntoa(tmp));
   char* result = new char[strlen(addr.buf)+1+strlen(mask.buf)+1+1];
   switch (p.action) {
   case Accept: result[0] = '+'; break;
index 4590befe514cccb4d6400398fce7cab922038724..1db2995cc2cc8aa49c59a864e7299e73d0e0c603 100644 (file)
@@ -17,6 +17,7 @@
  */
 #include <rfb/Blacklist.h>
 #include <rfb/Configuration.h>
+#include <stdlib.h>
 
 using namespace rfb;
 
@@ -37,7 +38,7 @@ Blacklist::~Blacklist() {
   // Free the map keys
   BlacklistMap::iterator i;
   for (i=blm.begin(); i!=blm.end(); i++) {
-    strFree((char*)(*i).first);
+    free((void *)(*i).first);
   }
 }
 
@@ -51,7 +52,7 @@ bool Blacklist::isBlackmarked(const char* name) {
     bi.marks = 1;
     bi.blockUntil = 0;
     bi.blockTimeout = initialTimeout;
-    blm[strDup(name)] = bi;
+    blm[safe_strdup(name)] = bi;
     i = blm.find(name);
   }
 
@@ -80,7 +81,7 @@ bool Blacklist::isBlackmarked(const char* name) {
 void Blacklist::clearBlackmark(const char* name) {
   BlacklistMap::iterator i = blm.find(name);
   if (i != blm.end()) {
-    strFree((char*)(*i).first);
+    free((void *)(*i).first);
     blm.erase(i);
   }
 }
index 36778f0287ccdf502c9254211a0d1fe53cbe77c2..599556960c788b7401261d91f9eedb0486cf63b1 100644 (file)
@@ -234,7 +234,7 @@ void CConnection::processSecurityResultMsg()
   }
   CharArray reason;
   if (cp.beforeVersion(3,8))
-    reason.buf = strDup("Authentication failure");
+    reason.buf = safe_strdup("Authentication failure");
   else
     reason.buf = is->readString();
   state_ = RFBSTATE_INVALID;
index 79110eb9e4ed3fa4efc58f1bdf83df1a6a04390a..b3fd093f4338ab0c6f0e00260ddb5fbf02e7cb8f 100644 (file)
@@ -47,7 +47,7 @@ namespace rfb {
     // which we are connected.  This might be the result of getPeerEndpoint on
     // a TcpSocket, for example, or a host specified by DNS name & port.
     // The serverName is used when verifying the Identity of a host (see RA2).
-    void setServerName(const char* name_) { serverName.replaceBuf(strDup(name_)); }
+    void setServerName(const char* name_) { serverName.replaceBuf(safe_strdup(name_)); }
 
     // setStreams() sets the streams to be used for the connection.  These must
     // be set before initialiseProtocol() and processMsg() are called.  The
index 9ebc20a8a19c31bacbc846af68f91d647c88b0e4..fd4c23aeed11d0d897d9135921e0e4f6b46723fa 100644 (file)
@@ -67,7 +67,7 @@ Configuration* Configuration::global() {
 // -=- Configuration implementation
 
 Configuration::Configuration(const char* name_, Configuration* attachToGroup) 
-: name(strDup(name_)), head(0), _next(0) {
+: name(safe_strdup(name_)), head(0), _next(0) {
   if (attachToGroup) {
     _next = attachToGroup->_next;
     attachToGroup->_next = this;
@@ -182,7 +182,7 @@ void Configuration::list(int width, int nameWidth) {
       if (column + (int)strlen(def_str) + 11 > width)
         fprintf(stderr,"\n%*s",nameWidth+4,"");
       fprintf(stderr," (default=%s)\n",def_str);
-      strFree(def_str);
+      free(def_str);
     } else {
       fprintf(stderr,"\n");
     }
@@ -315,11 +315,11 @@ void BoolParameter::setParam(bool b) {
 
 char*
 BoolParameter::getDefaultStr() const {
-  return strDup(def_value ? "1" : "0");
+  return safe_strdup(def_value ? "1" : "0");
 }
 
 char* BoolParameter::getValueStr() const {
-  return strDup(value ? "1" : "0");
+  return safe_strdup(value ? "1" : "0");
 }
 
 bool BoolParameter::isBool() const {
@@ -381,7 +381,7 @@ IntParameter::operator int() const {
 
 StringParameter::StringParameter(const char* name_, const char* desc_,
                                  const char* v, Configuration* conf)
-  : VoidParameter(name_, desc_, conf), value(strDup(v)), def_value(v)
+  : VoidParameter(name_, desc_, conf), value(safe_strdup(v)), def_value(v)
 {
   if (!v) {
     fprintf(stderr,"Default value <null> for %s not allowed\n",name_);
@@ -390,7 +390,7 @@ StringParameter::StringParameter(const char* name_, const char* desc_,
 }
 
 StringParameter::~StringParameter() {
-  strFree(value);
+  free(value);
 }
 
 bool StringParameter::setParam(const char* v) {
@@ -400,17 +400,17 @@ bool StringParameter::setParam(const char* v) {
     throw rfb::Exception("setParam(<null>) not allowed");
   vlog.debug("set %s(String) to %s", getName(), v);
   CharArray oldValue(value);
-  value = strDup(v);
+  value = safe_strdup(v);
   return value != 0;
 }
 
 char* StringParameter::getDefaultStr() const {
-  return strDup(def_value);
+  return safe_strdup(def_value);
 }
 
 char* StringParameter::getValueStr() const {
   LOCK_CONFIG;
-  return strDup(value);
+  return safe_strdup(value);
 }
 
 // -=- BinaryParameter
index 7b27a73462327b01332320fd0a8fe6167dccaa7b..4bbd2cbec2622e6eb0d696a1a033c8a2d8accf91 100644 (file)
@@ -82,7 +82,7 @@ void ConnParams::setPF(const PixelFormat& pf)
 void ConnParams::setName(const char* name)
 {
   delete [] name_;
-  name_ = strDup(name);
+  name_ = safe_strdup(name);
 }
 
 void ConnParams::setEncodings(int nEncodings, const rdr::U32* encodings)
index 94f06090503b7d7fb0d9216445b344aa236eaae1..934ca74e7af180947df244b6e689c3420777275c 100644 (file)
@@ -240,7 +240,7 @@ HTTPServer::Session::processHTTP() {
           return writeResponse(501);
 
         // Store the URI to the "document"
-        uri.buf = strDup(path);
+        uri.buf = safe_strdup(path);
       }
 
       // Move on to reading the request headers
index ebdf816f42343e2ef2f09dd32136693b5215187a..d7ff664ebaf7d9371b414928805e577988f66934 100644 (file)
@@ -32,7 +32,7 @@ namespace rfb {
       if (!strSplit(&hi[1], ']', &hostBuf.buf, &portBuf.buf))
         throw rdr::Exception("unmatched [ in host");
     } else {
-      portBuf.buf = strDup(hi);
+      portBuf.buf = safe_strdup(hi);
     }
     if (strSplit(portBuf.buf, ':', hostBuf.buf ? 0 : &hostBuf.buf, &portBuf.buf)) {
       if (portBuf.buf[0] == ':') {
@@ -45,7 +45,7 @@ namespace rfb {
       *port = basePort;
     }
     if (strlen(hostBuf.buf) == 0)
-      *host = strDup("localhost");
+      *host = safe_strdup("localhost");
     else
       *host = hostBuf.takeBuf();
   }
index cabcbc79cbe9e6b0bd211a7822c94bee79e14d7f..6e4eacc5d3632295f44b5cf6d9e12e0cffd0555d 100644 (file)
@@ -52,8 +52,8 @@ namespace rfb {
 
     void addInfo(void* Conn, char* IP, char* Time, int Status) {
       conn.push_back(Conn);
-      IP_address.push_back(strDup(IP));
-      time_conn.push_back(strDup(Time));
+      IP_address.push_back(safe_strdup(IP));
+      time_conn.push_back(safe_strdup(Time));
       status.push_back(Status);
     }
 
@@ -62,16 +62,16 @@ namespace rfb {
       buf[1] = *ti;
       switch (*si) {
       case 0:
-        buf[2] = strDup("Full control");
+        buf[2] = safe_strdup("Full control");
         break;
       case 1:
-        buf[2] = strDup("View only");
+        buf[2] = safe_strdup("View only");
         break;
       case 2:
-        buf[2] = strDup("Stop updating");
+        buf[2] = safe_strdup("Stop updating");
         break;
       default:
-        buf[2] = strDup("Unknown");
+        buf[2] = safe_strdup("Unknown");
       }
     }
 
index 8a109e4a09be02cf2840cc4aca25e9a0fff47e7f..cf195c0d542608409d1787f4fdc9f92fb960ccad 100644 (file)
@@ -97,7 +97,7 @@ void Logger_File::write(int level, const char *logname, const char *message)
 void Logger_File::setFilename(const char* filename)
 {
   closeFile();
-  m_filename = strDup(filename);
+  m_filename = safe_strdup(filename);
 }
 
 void Logger_File::setFile(FILE* file)
@@ -113,7 +113,7 @@ void Logger_File::closeFile()
       fclose(m_file);
       m_file = 0;
     }
-    strFree(m_filename);
+    free(m_filename);
     m_filename = 0;
   }
 }
index e286cf315b2a7bcfee555df37db6e923dfd6d6d8..0006ff204a8a0664a67a0d896ba56d65773e1e50 100644 (file)
@@ -89,7 +89,7 @@ void VNCSConnectionST::close(const char* reason)
 {
   // Log the reason for the close
   if (!closeReason.buf)
-    closeReason.buf = strDup(reason);
+    closeReason.buf = safe_strdup(reason);
   else
     vlog.debug("second close: %s (%s)", peerEndpoint.buf, reason);
 
index a21526ad7b19bff2a6b1f4cbe9401fcf46c9760e..5be639693f25d1ffc75636c50253b1d190f86a32 100644 (file)
@@ -74,7 +74,7 @@ static SSecurityFactoryStandard defaultSecurityFactory;
 VNCServerST::VNCServerST(const char* name_, SDesktop* desktop_,
                          SSecurityFactory* sf)
   : blHosts(&blacklist), desktop(desktop_), desktopStarted(false), pb(0),
-    name(strDup(name_)), pointerClient(0), comparer(0),
+    name(safe_strdup(name_)), pointerClient(0), comparer(0),
     renderedCursorInvalid(false),
     securityFactory(sf ? sf : &defaultSecurityFactory),
     queryConnectionHandler(0), keyRemapper(&KeyRemapper::defInstance),
@@ -363,7 +363,7 @@ void VNCServerST::serverCutText(const char* str, int len)
 
 void VNCServerST::setName(const char* name_)
 {
-  name.replaceBuf(strDup(name_));
+  name.replaceBuf(safe_strdup(name_));
   std::list<VNCSConnectionST*>::iterator ci, ci_next;
   for (ci = clients.begin(); ci != clients.end(); ci = ci_next) {
     ci_next = ci; ci_next++;
index 830d84446d2984ccf3acb18bc76d8474c35ea292..9ea6a00066a1fc8475f209781daf9bb0f46b9d53 100644 (file)
@@ -62,7 +62,7 @@ bool rfb::secTypeEncrypts(int num)
 std::list<int> rfb::parseSecTypes(const char* types_)
 {
   std::list<int> result;
-  CharArray types(strDup(types_)), type;
+  CharArray types(safe_strdup(types_)), type;
   while (types.buf) {
     strSplit(types.buf, ',', &type.buf, &types.buf);
     int typeNum = secTypeNum(type.buf);
index a50ea58628713021fd696be3a5acdc166c80ba05..7935a3a00368e52a6a45b89d3594b2fac852bd7c 100644 (file)
 #endif
 
 #include <rfb/util.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+char* safe_strdup(const char* s) {
+  char *tmp;
+
+  tmp = strdup(s);
+  if (tmp == NULL) {
+    perror("safe_strdup failed");
+    exit(1);
+  }
+};
 
 // Provide strcasecmp() and/or strncasecmp() if absent on this system.
 
@@ -129,19 +142,6 @@ strncasecmp(const char *s1, const char *s2, size_t n)
 
 namespace rfb {
 
-  char* strDup(const char* s) {
-    if (!s) return 0;
-    int l = strlen(s);
-    char* r = new char[l+1];
-    memcpy(r, s, l+1);
-    return r;
-  };
-
-  void strFree(char* s) {
-    delete [] s;
-  }
-
-
   bool strSplit(const char* src, const char limiter, char** out1, char** out2, bool fromEnd) {
     CharArray out1old, out2old;
     if (out1) out1old.buf = *out1;
@@ -167,7 +167,7 @@ namespace rfb {
       }
       i+=increment;
     }
-    if (out1) *out1 = strDup(src);
+    if (out1) *out1 = safe_strdup(src);
     if (out2) *out2 = 0;
     return false;
   }
index 933df5272f45ccd397d02a116f0d99276ee04558..8bf54842425ecc4b71a23ddd1eee0565282c800a 100644 (file)
@@ -30,6 +30,8 @@
 #include <limits.h>
 #include <string.h>
 
+char* safe_strdup(const char* s);
+
 namespace rfb {
 
   // -=- Class to handle cleanup of arrays of characters
@@ -52,9 +54,6 @@ namespace rfb {
     CharArray& operator=(const CharArray&);
   };
 
-  char* strDup(const char* s);
-  void strFree(char* s);
-
   // Returns true if split successful.  Returns false otherwise.
   // ALWAYS *copies* first part of string to out1 buffer.
   // If limiter not found, leaves out2 alone (null) and just copies to out1.
index b7472797688cf0944e588f98c1adb7ece32fbbbc..59a84303ec27b2683692cc454a2059cc8d09249a 100644 (file)
@@ -59,7 +59,7 @@ public:
 
   // setText() changes the text in the button.
   void setText(const char* text_) {
-    text.buf = rfb::strDup(text_);
+    text.buf = safe_strdup(text_);
     int textWidth = XTextWidth(defaultFS, text.buf, strlen(text.buf));
     int textHeight = (defaultFS->ascent + defaultFS->descent);
     int newWidth = __rfbmax(width(), textWidth + xPad*2 + bevel*2);
index 3d5200d6748c6894490838ba100df33182b0c8c0..ebb8403caec9684de8990a19513c01e2520658e5 100644 (file)
@@ -47,7 +47,7 @@ public:
 
   // setText() changes the text in the label.
   void setText(const char* text_) {
-    text.buf = rfb::strDup(text_);
+    text.buf = safe_strdup(text_);
     lines = 0;
     int lineStart = 0;
     int textWidth = 0;
index 92712f558efdaa54d878b06c6ea56532d588eab3..df57daf82b1a923e838aee129a906df9d1494b1a 100644 (file)
@@ -56,7 +56,7 @@ inline int TXMenu::entryHeight(int i)
 void TXMenu::addEntry(const char* text_, long id_)
 {
   assert(nEntries < maxEntries);
-  text[nEntries] = rfb::strDup(text_);
+  text[nEntries] = safe_strdup(text_);
   checked[nEntries] = false;
   id[nEntries++] = id_;
   int tw = 0;
index 2b535df855f7ec1307a53b541de33a99f1dda416..1b695e5b564bdfdcdc2834584d8e93cebd91d452 100644 (file)
@@ -93,7 +93,7 @@ void TXWindow::init(Display* dpy, const char* defaultWindowClass_)
   static char tickBits[] = { 0x80, 0xc0, 0xe2, 0x76, 0x3e, 0x1c, 0x08, 0x00};
   tick = XCreateBitmapFromData(dpy, DefaultRootWindow(dpy), tickBits,
                                tickSize, tickSize);
-  defaultWindowClass = rfb::strDup(defaultWindowClass_);
+  defaultWindowClass = safe_strdup(defaultWindowClass_);
 }
 
 void TXWindow::handleXEvents(Display* dpy)
index 8231f4c6efe399fc4613bde12f266a4850d6f7cc..efc3c3352bdc291af549c4264320e9dcd78ae89d 100644 (file)
@@ -221,8 +221,8 @@ void CConn::getUserPasswd(char** user, char** password)
   PasswdDialog dlg(dpy, title.buf, !user);
   if (!dlg.show()) throw rfb::Exception("Authentication cancelled");
   if (user)
-    *user = strDup(dlg.userEntry.getText());
-  *password = strDup(dlg.passwdEntry.getText());
+    *user = safe_strdup(dlg.userEntry.getText());
+  *password = safe_strdup(dlg.passwdEntry.getText());
 }
 
 
index 4a47788ea5b0ca063dbba66ec4f09564081d47e3..203df9a9b9fc329e3586f741e4895166c3d18685 100644 (file)
@@ -218,7 +218,7 @@ interpretViaParam (char **gatewayHost, char **remoteHost,
   if (**vncServerName != '\0')
     *remoteHost = *vncServerName;
 
-  *gatewayHost = strDup (via.getValueStr ());
+  *gatewayHost = safe_strdup (via.getValueStr ());
   *vncServerName = new char[50];
   sprintf (*vncServerName, "localhost::%d", localPort);
 }
index ec2fd7647db75f06f073736d266cb2ba02c38a48..3e555ce2218b67ea83ba78e6ad307bb9a7b6180f 100644 (file)
@@ -101,7 +101,7 @@ public:
                                                    const char* userName,
                                                    char** reason) {
     if (queryConnectSock) {
-      *reason = strDup("Another connection is currently being queried.");
+      *reason = safe_strdup("Another connection is currently being queried.");
       return VNCServerST::REJECT;
     }
     if (!userName) userName = "(anonymous)";
index 66c92d29d64763dcbfebb15d537fab6666ee87ff..e8e49494a91f9810bc9f8efc77371401c93c444b 100644 (file)
@@ -219,7 +219,7 @@ void XserverDesktop::setFramebuffer(int w, int h, void* fbptr, int stride)
 char* XserverDesktop::substitute(const char* varName)
 {
   if (strcmp(varName, "$$") == 0) {
-    return rfb::strDup("$");
+    return safe_strdup("$");
   }
   if (strcmp(varName, "$PORT") == 0) {
     char* str = new char[10];
@@ -247,7 +247,7 @@ char* XserverDesktop::substitute(const char* varName)
     return str;
   }
   if (strcmp(varName, "$DESKTOP") == 0) {
-    return rfb::strDup(server->getName());
+    return safe_strdup(server->getName());
   }
   if (strcmp(varName, "$DISPLAY") == 0) {
     struct utsname uts;
@@ -260,7 +260,7 @@ char* XserverDesktop::substitute(const char* varName)
   }
   if (strcmp(varName, "$USER") == 0) {
     struct passwd* user = getpwuid(getuid());
-    return rfb::strDup(user ? user->pw_name : "?");
+    return safe_strdup(user ? user->pw_name : "?");
   }
   return 0;
 }
@@ -270,13 +270,13 @@ XserverDesktop::queryConnection(network::Socket* sock,
                                 const char* userName,
                                 char** reason) {
   if (queryConnectId) {
-    *reason = strDup("Another connection is currently being queried.");
+    *reason = safe_strdup("Another connection is currently being queried.");
     return rfb::VNCServerST::REJECT;
   }
   queryConnectAddress.replaceBuf(sock->getPeerAddress());
   if (!userName)
     userName = "(anonymous)";
-  queryConnectUsername.replaceBuf(strDup(userName));
+  queryConnectUsername.replaceBuf(safe_strdup(userName));
   queryConnectId = sock;
   vncQueryConnect(this, sock);
   return rfb::VNCServerST::PENDING;