]> git.saurik.com Git - wxWidgets.git/commitdiff
zero {host,serv}ent_data before passing it to the system functions to avoid crashing...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 25 Jan 2009 12:45:29 +0000 (12:45 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 25 Jan 2009 12:45:29 +0000 (12:45 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58386 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/sckaddr.cpp

index fa142eb5f71c355b1fc82100109ea4b7a5c16dd8..9e2b8682e748692f8b2704605be2bba5e428d975 100644 (file)
@@ -121,15 +121,29 @@ IMPLEMENT_DYNAMIC_CLASS(wxUNIXaddress, wxSockAddress)
 #endif
 
 // the _r functions need the extra buffer parameter but unfortunately its type
-// differs between different systems
+// differs between different systems and for the systems which use opaque
+// structs for it (at least AIX and OpenBSD) it must be zero-filled before
+// being passed to the system functions
 #ifdef HAVE_FUNC_GETHOSTBYNAME_R_3
-    typedef hostent_data wxGethostBuf;
+    struct wxGethostBuf : hostent_data
+    {
+        wxGethostBuf()
+        {
+            memset(this, 0, sizeof(hostent_data));
+        }
+    };
 #else
     typedef char wxGethostBuf[1024];
 #endif
 
 #ifdef HAVE_FUNC_GETSERVBYNAME_R_3
-    typedef servent_data wxGetservBuf;
+    struct wxGetservBuf : servent_data
+    {
+        wxGethostBuf()
+        {
+            memset(this, 0, sizeof(servent_data));
+        }
+    };
 #else
     typedef char wxGetservBuf[1024];
 #endif