diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx
index 7ceff0b..7056a08 100644
--- a/common/network/TcpSocket.cxx
+++ b/common/network/TcpSocket.cxx
@@ -238,9 +238,9 @@
 
   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* 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 @@
 
 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 @@
   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;
diff --git a/common/rfb/Blacklist.cxx b/common/rfb/Blacklist.cxx
index 4590bef..1db2995 100644
--- a/common/rfb/Blacklist.cxx
+++ b/common/rfb/Blacklist.cxx
@@ -17,6 +17,7 @@
  */
 #include <rfb/Blacklist.h>
 #include <rfb/Configuration.h>
+#include <stdlib.h>
 
 using namespace rfb;
 
@@ -37,7 +38,7 @@
   // 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 @@
     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 @@
 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);
   }
 }
diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index 36778f0..5995569 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -234,7 +234,7 @@
   }
   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;
diff --git a/common/rfb/CConnection.h b/common/rfb/CConnection.h
index 79110eb..b3fd093 100644
--- a/common/rfb/CConnection.h
+++ b/common/rfb/CConnection.h
@@ -47,7 +47,7 @@
     // 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
diff --git a/common/rfb/Configuration.cxx b/common/rfb/Configuration.cxx
index 9ebc20a..fd4c23a 100644
--- a/common/rfb/Configuration.cxx
+++ b/common/rfb/Configuration.cxx
@@ -67,7 +67,7 @@
 // -=- 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 @@
       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 @@
 
 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 @@
 
 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() {
-  strFree(value);
+  free(value);
 }
 
 bool StringParameter::setParam(const char* v) {
@@ -400,17 +400,17 @@
     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
diff --git a/common/rfb/ConnParams.cxx b/common/rfb/ConnParams.cxx
index 7b27a73..4bbd2cb 100644
--- a/common/rfb/ConnParams.cxx
+++ b/common/rfb/ConnParams.cxx
@@ -82,7 +82,7 @@
 void ConnParams::setName(const char* name)
 {
   delete [] name_;
-  name_ = strDup(name);
+  name_ = safe_strdup(name);
 }
 
 void ConnParams::setEncodings(int nEncodings, const rdr::U32* encodings)
diff --git a/common/rfb/HTTPServer.cxx b/common/rfb/HTTPServer.cxx
index 94f0609..934ca74 100644
--- a/common/rfb/HTTPServer.cxx
+++ b/common/rfb/HTTPServer.cxx
@@ -240,7 +240,7 @@
           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
diff --git a/common/rfb/Hostname.h b/common/rfb/Hostname.h
index ebdf816..d7ff664 100644
--- a/common/rfb/Hostname.h
+++ b/common/rfb/Hostname.h
@@ -32,7 +32,7 @@
       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 @@
       *port = basePort;
     }
     if (strlen(hostBuf.buf) == 0)
-      *host = strDup("localhost");
+      *host = safe_strdup("localhost");
     else
       *host = hostBuf.takeBuf();
   }
diff --git a/common/rfb/ListConnInfo.h b/common/rfb/ListConnInfo.h
index cabcbc7..6e4eacc 100644
--- a/common/rfb/ListConnInfo.h
+++ b/common/rfb/ListConnInfo.h
@@ -52,8 +52,8 @@
 
     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 @@
       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");
       }
     }
 
diff --git a/common/rfb/Logger_file.cxx b/common/rfb/Logger_file.cxx
index 8a109e4..cf195c0 100644
--- a/common/rfb/Logger_file.cxx
+++ b/common/rfb/Logger_file.cxx
@@ -97,7 +97,7 @@
 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 @@
       fclose(m_file);
       m_file = 0;
     }
-    strFree(m_filename);
+    free(m_filename);
     m_filename = 0;
   }
 }
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index e286cf3..0006ff2 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -89,7 +89,7 @@
 {
   // 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);
 
diff --git a/common/rfb/VNCServerST.cxx b/common/rfb/VNCServerST.cxx
index a21526a..5be6396 100644
--- a/common/rfb/VNCServerST.cxx
+++ b/common/rfb/VNCServerST.cxx
@@ -74,7 +74,7 @@
 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::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++;
diff --git a/common/rfb/secTypes.cxx b/common/rfb/secTypes.cxx
index 830d844..9ea6a00 100644
--- a/common/rfb/secTypes.cxx
+++ b/common/rfb/secTypes.cxx
@@ -62,7 +62,7 @@
 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);
diff --git a/common/rfb/util.cxx b/common/rfb/util.cxx
index a50ea58..7935a3a 100644
--- a/common/rfb/util.cxx
+++ b/common/rfb/util.cxx
@@ -35,6 +35,19 @@
 #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 @@
 
 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 @@
       }
       i+=increment;
     }
-    if (out1) *out1 = strDup(src);
+    if (out1) *out1 = safe_strdup(src);
     if (out2) *out2 = 0;
     return false;
   }
diff --git a/common/rfb/util.h b/common/rfb/util.h
index 933df52..8bf5484 100644
--- a/common/rfb/util.h
+++ b/common/rfb/util.h
@@ -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 @@
     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.
