From 19b4490fd23f50b0eb154cb7580e92ae4a108113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 1 Dec 2010 17:32:27 +0000 Subject: [PATCH] * The constructors weren't defined in declaration order. * Unflatten() will now check whether the size of the buffer was large enough to hold a valid address. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39693 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/network/libnetapi/NetworkAddress.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/kits/network/libnetapi/NetworkAddress.cpp b/src/kits/network/libnetapi/NetworkAddress.cpp index 45236f2fad..e2f5ec9fa2 100644 --- a/src/kits/network/libnetapi/NetworkAddress.cpp +++ b/src/kits/network/libnetapi/NetworkAddress.cpp @@ -16,6 +16,12 @@ #include +BNetworkAddress::BNetworkAddress() +{ + Unset(); +} + + BNetworkAddress::BNetworkAddress(const char* host, uint16 port, uint32 flags) { SetTo(host, port, flags); @@ -93,12 +99,6 @@ BNetworkAddress::BNetworkAddress(const BNetworkAddress& other) } -BNetworkAddress::BNetworkAddress() -{ - Unset(); -} - - BNetworkAddress::~BNetworkAddress() { } @@ -995,6 +995,11 @@ BNetworkAddress::Unflatten(type_code code, const void* buffer, ssize_t size) return fStatus = B_BAD_TYPE; memcpy(&fAddress, buffer, min_c(size, (ssize_t)sizeof(fAddress))); + + // check if this can contain a valid address + if (fAddress.ss_family != AF_UNSPEC && size < (ssize_t)sizeof(sockaddr)) + return fStatus = B_BAD_VALUE; + return fStatus = B_OK; }