From c0bbda3225100d48b40748854ac00aef0c15815b Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 28 Jun 2006 11:10:02 +0000 Subject: 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 --- pjlib/src/pj/sock_bsd.c | 3 +++ pjlib/src/pjlib-test/sock.c | 11 +++++++++++ 2 files changed, 14 insertions(+) (limited to 'pjlib/src') 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; } -- cgit v1.2.3