summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-06-28 11:10:02 +0000
committerBenny Prijono <bennylp@teluu.com>2006-06-28 11:10:02 +0000
commitc0bbda3225100d48b40748854ac00aef0c15815b (patch)
treef612db17688d000ebc0fc98028ea775e4cbe51af
parent0b299faa48f393cd8e30751c1337921108e87102 (diff)
Fixed bug in sockaddr_in: the sin_zero part of the sockaddr_in is not zeroed, causing SIP transport hash table to behave erraticly
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@557 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjlib/src/pj/sock_bsd.c3
-rw-r--r--pjlib/src/pjlib-test/sock.c11
2 files changed, 14 insertions, 0 deletions
diff --git a/pjlib/src/pj/sock_bsd.c b/pjlib/src/pj/sock_bsd.c
index 37cb85e5..b3bb86b4 100644
--- a/pjlib/src/pj/sock_bsd.c
+++ b/pjlib/src/pj/sock_bsd.c
@@ -210,6 +210,7 @@ PJ_DEF(pj_status_t) pj_sockaddr_in_set_str_addr( pj_sockaddr_in *addr,
RESET_LEN(addr);
addr->sin_family = AF_INET;
+ pj_memset(addr->sin_zero, 0, sizeof(addr->sin_zero));
if (str_addr && str_addr->slen) {
addr->sin_addr = pj_inet_addr(str_addr);
@@ -247,6 +248,7 @@ PJ_DEF(pj_status_t) pj_sockaddr_in_init( pj_sockaddr_in *addr,
RESET_LEN(addr);
addr->sin_family = PJ_AF_INET;
+ pj_memset(addr->sin_zero, 0, sizeof(addr->sin_zero));
pj_sockaddr_in_set_port(addr, port);
return pj_sockaddr_in_set_str_addr(addr, str_addr);
}
@@ -368,6 +370,7 @@ PJ_DEF(pj_status_t) pj_sock_bind_in( pj_sock_t sock,
SET_LEN(&addr, sizeof(pj_sockaddr_in));
addr.sin_family = PJ_AF_INET;
+ pj_memset(addr.sin_zero, 0, sizeof(addr.sin_zero));
addr.sin_addr.s_addr = pj_htonl(addr32);
addr.sin_port = pj_htons(port);
diff --git a/pjlib/src/pjlib-test/sock.c b/pjlib/src/pjlib-test/sock.c
index 1bdd637e..cf7dfadb 100644
--- a/pjlib/src/pjlib-test/sock.c
+++ b/pjlib/src/pjlib-test/sock.c
@@ -78,6 +78,8 @@ static int format_test(void)
pj_str_t s = pj_str(ADDRESS);
unsigned char *p;
pj_in_addr addr;
+ char zero[64];
+ pj_sockaddr_in addr2;
const pj_str_t *hostname;
PJ_LOG(3,("test", "...format_test()"));
@@ -103,6 +105,14 @@ static int format_test(void)
if (pj_strcmp2(&s, (char*)p) != 0)
return -30;
+ /* Test that pj_sockaddr_in_init() initialize the whole structure,
+ * including sin_zero.
+ */
+ pj_sockaddr_in_init(&addr2, 0, 1000);
+ pj_memset(zero, 0, sizeof(zero));
+ if (pj_memcmp(addr2.sin_zero, zero, sizeof(addr2.sin_zero)) != 0)
+ return -35;
+
/* pj_gethostname() */
hostname = pj_gethostname();
if (!hostname || !hostname->ptr || !hostname->slen)
@@ -113,6 +123,7 @@ static int format_test(void)
/* pj_gethostaddr() */
+
return 0;
}