summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/sock_bsd.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-12-05 05:08:29 +0000
committerBenny Prijono <bennylp@teluu.com>2007-12-05 05:08:29 +0000
commitd1146bb616cf5387123305fdf79319fc46de437c (patch)
tree9e2f3eecf7dc1d5279c50bd12f8ea8278e73dff2 /pjlib/src/pj/sock_bsd.c
parent0867865e82fcdd71fc78c90ca9c1c833ef5882d6 (diff)
Fixed run-time error on MacOS X (and possibly BSD based systems) when bind() is called with larger addrlen
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1621 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pj/sock_bsd.c')
-rw-r--r--pjlib/src/pj/sock_bsd.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/pjlib/src/pj/sock_bsd.c b/pjlib/src/pj/sock_bsd.c
index 761c03bc..1a6d13f8 100644
--- a/pjlib/src/pj/sock_bsd.c
+++ b/pjlib/src/pj/sock_bsd.c
@@ -123,6 +123,18 @@ const int PJ_MSG_PEEK = MSG_PEEK;
const int PJ_MSG_DONTROUTE = MSG_DONTROUTE;
+#if 0
+static void CHECK_ADDR_LEN(const pj_sockaddr *addr, int len)
+{
+ pj_sockaddr *a = (pj_sockaddr*)addr;
+ pj_assert((a->addr.sa_family==PJ_AF_INET && len==sizeof(pj_sockaddr_in)) ||
+ (a->addr.sa_family==PJ_AF_INET6 && len==sizeof(pj_sockaddr_in6)));
+
+}
+#else
+#define CHECK_ADDR_LEN(addr,len)
+#endif
+
/*
* Convert 16-bit value from network byte order to host byte order.
*/
@@ -449,7 +461,6 @@ PJ_DEF(pj_status_t) pj_sock_socket(int af,
}
#endif
-
/*
* Bind socket.
*/
@@ -461,6 +472,8 @@ PJ_DEF(pj_status_t) pj_sock_bind( pj_sock_t sock,
PJ_ASSERT_RETURN(addr && len >= (int)sizeof(struct sockaddr_in), PJ_EINVAL);
+ CHECK_ADDR_LEN(addr, len);
+
if (bind(sock, (struct sockaddr*)addr, len) != 0)
return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());
else
@@ -574,6 +587,8 @@ PJ_DEF(pj_status_t) pj_sock_sendto(pj_sock_t sock,
{
PJ_CHECK_STACK();
PJ_ASSERT_RETURN(len, PJ_EINVAL);
+
+ CHECK_ADDR_LEN(to, tolen);
*len = sendto(sock, (const char*)buf, *len, flags,
(const struct sockaddr*)to, tolen);