From 80f399839866a55b54d64dfdbfac2bd880086452 Mon Sep 17 00:00:00 2001 From: crs Date: Wed, 3 Sep 2003 21:54:18 +0000 Subject: [PATCH] Changed name-to-address translation to only use IPv4 addresses and to only copy as much address as fits in sockaddr_in.sin_addr, in case hostent.h_length is wrong. --- lib/arch/CArchNetworkBSD.cpp | 13 ++++++++----- lib/arch/CArchNetworkWinsock.cpp | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/arch/CArchNetworkBSD.cpp b/lib/arch/CArchNetworkBSD.cpp index 1db5df82..9bd3c138 100644 --- a/lib/arch/CArchNetworkBSD.cpp +++ b/lib/arch/CArchNetworkBSD.cpp @@ -611,11 +611,14 @@ CArchNetworkBSD::nameToAddr(const std::string& name) } // copy over address (only IPv4 currently supported) - addr->m_len = sizeof(struct sockaddr_in); - inaddr.sin_family = info->h_addrtype; - inaddr.sin_port = 0; - memcpy(&inaddr.sin_addr, info->h_addr_list[0], info->h_length); - memcpy(&addr->m_addr, &inaddr, addr->m_len); + if (info->h_addrtype == AF_INET) { + addr->m_len = sizeof(struct sockaddr_in); + inaddr.sin_family = info->h_addrtype; + inaddr.sin_port = 0; + memcpy(&inaddr.sin_addr, info->h_addr_list[0], + sizeof(inaddr.sin_addr)); + memcpy(&addr->m_addr, &inaddr, addr->m_len); + } // done with static buffer ARCH->unlockMutex(m_mutex); diff --git a/lib/arch/CArchNetworkWinsock.cpp b/lib/arch/CArchNetworkWinsock.cpp index 09b507ae..d7b58e87 100644 --- a/lib/arch/CArchNetworkWinsock.cpp +++ b/lib/arch/CArchNetworkWinsock.cpp @@ -618,11 +618,14 @@ CArchNetworkWinsock::nameToAddr(const std::string& name) } // copy over address (only IPv4 currently supported) - addr->m_len = sizeof(struct sockaddr_in); - inaddr.sin_family = info->h_addrtype; - inaddr.sin_port = 0; - memcpy(&inaddr.sin_addr, info->h_addr_list[0], info->h_length); - memcpy(&addr->m_addr, &inaddr, addr->m_len); + if (info->h_addrtype == AF_INET) { + addr->m_len = sizeof(struct sockaddr_in); + inaddr.sin_family = info->h_addrtype; + inaddr.sin_port = 0; + memcpy(&inaddr.sin_addr, info->h_addr_list[0], + sizeof(inaddr.sin_addr)); + memcpy(&addr->m_addr, &inaddr, addr->m_len); + } } return addr;