From ec5756d6b52ac654ca34cd0c58270276d67da503 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 25 Jan 2009 12:45:29 +0000 Subject: [PATCH] zero {host,serv}ent_data before passing it to the system functions to avoid crashing (see #10332) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58386 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/sckaddr.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/common/sckaddr.cpp b/src/common/sckaddr.cpp index fa142eb5f7..9e2b8682e7 100644 --- a/src/common/sckaddr.cpp +++ b/src/common/sckaddr.cpp @@ -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 -- 2.45.2