Mercurial > emacs
changeset 69981:9fb9e33ecf2d
(conv_lisp_to_sockaddr): Fix previous change.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 13 Apr 2006 01:08:00 +0000 |
parents | f347a837af60 |
children | bc4b32f0f6c1 |
files | src/process.c |
diffstat | 1 files changed, 8 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/process.c Thu Apr 13 00:31:32 2006 +0000 +++ b/src/process.c Thu Apr 13 01:08:00 2006 +0000 @@ -2322,9 +2322,11 @@ } /* Convert an address object (vector or string) to an internal sockaddr. - Address format has already been validated by get_lisp_to_sockaddr_size, - but just to be nice, we return without doing anything - if FAMILY is not valid. */ + + The address format has been basically validated by + get_lisp_to_sockaddr_size, but this does not mean FAMILY is valid; + it could have come from user data. So if FAMILY is not valid, + we return after zeroing *SA. */ static void conv_lisp_to_sockaddr (family, address, sa, len) @@ -2338,7 +2340,6 @@ register int i; bzero (sa, len); - sa->sa_family = family; if (VECTORP (address)) { @@ -2350,6 +2351,7 @@ i = XINT (p->contents[--len]); sin->sin_port = htons (i); cp = (unsigned char *)&sin->sin_addr; + sa->sa_family = family; } #ifdef AF_INET6 else if (family == AF_INET6) @@ -2365,7 +2367,7 @@ int j = XFASTINT (p->contents[i]) & 0xffff; ip6[i] = ntohs (j); } - return; + sa->sa_family = family; } #endif return; @@ -2379,6 +2381,7 @@ cp = SDATA (address); for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++) sockun->sun_path[i] = *cp++; + sa->sa_family = family; } #endif return;