diff options
Diffstat (limited to 'src/process.c')
| -rw-r--r-- | src/process.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/process.c b/src/process.c index 003f27b77b8..6e633a5825c 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -2322,7 +2322,11 @@ get_lisp_to_sockaddr_size (address, familyp) | |||
| 2322 | } | 2322 | } |
| 2323 | 2323 | ||
| 2324 | /* Convert an address object (vector or string) to an internal sockaddr. | 2324 | /* Convert an address object (vector or string) to an internal sockaddr. |
| 2325 | Format of address has already been validated by size_lisp_to_sockaddr. */ | 2325 | |
| 2326 | The address format has been basically validated by | ||
| 2327 | get_lisp_to_sockaddr_size, but this does not mean FAMILY is valid; | ||
| 2328 | it could have come from user data. So if FAMILY is not valid, | ||
| 2329 | we return after zeroing *SA. */ | ||
| 2326 | 2330 | ||
| 2327 | static void | 2331 | static void |
| 2328 | conv_lisp_to_sockaddr (family, address, sa, len) | 2332 | conv_lisp_to_sockaddr (family, address, sa, len) |
| @@ -2336,7 +2340,6 @@ conv_lisp_to_sockaddr (family, address, sa, len) | |||
| 2336 | register int i; | 2340 | register int i; |
| 2337 | 2341 | ||
| 2338 | bzero (sa, len); | 2342 | bzero (sa, len); |
| 2339 | sa->sa_family = family; | ||
| 2340 | 2343 | ||
| 2341 | if (VECTORP (address)) | 2344 | if (VECTORP (address)) |
| 2342 | { | 2345 | { |
| @@ -2348,6 +2351,7 @@ conv_lisp_to_sockaddr (family, address, sa, len) | |||
| 2348 | i = XINT (p->contents[--len]); | 2351 | i = XINT (p->contents[--len]); |
| 2349 | sin->sin_port = htons (i); | 2352 | sin->sin_port = htons (i); |
| 2350 | cp = (unsigned char *)&sin->sin_addr; | 2353 | cp = (unsigned char *)&sin->sin_addr; |
| 2354 | sa->sa_family = family; | ||
| 2351 | } | 2355 | } |
| 2352 | #ifdef AF_INET6 | 2356 | #ifdef AF_INET6 |
| 2353 | else if (family == AF_INET6) | 2357 | else if (family == AF_INET6) |
| @@ -2363,9 +2367,10 @@ conv_lisp_to_sockaddr (family, address, sa, len) | |||
| 2363 | int j = XFASTINT (p->contents[i]) & 0xffff; | 2367 | int j = XFASTINT (p->contents[i]) & 0xffff; |
| 2364 | ip6[i] = ntohs (j); | 2368 | ip6[i] = ntohs (j); |
| 2365 | } | 2369 | } |
| 2366 | return; | 2370 | sa->sa_family = family; |
| 2367 | } | 2371 | } |
| 2368 | #endif | 2372 | #endif |
| 2373 | return; | ||
| 2369 | } | 2374 | } |
| 2370 | else if (STRINGP (address)) | 2375 | else if (STRINGP (address)) |
| 2371 | { | 2376 | { |
| @@ -2376,6 +2381,7 @@ conv_lisp_to_sockaddr (family, address, sa, len) | |||
| 2376 | cp = SDATA (address); | 2381 | cp = SDATA (address); |
| 2377 | for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++) | 2382 | for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++) |
| 2378 | sockun->sun_path[i] = *cp++; | 2383 | sockun->sun_path[i] = *cp++; |
| 2384 | sa->sa_family = family; | ||
| 2379 | } | 2385 | } |
| 2380 | #endif | 2386 | #endif |
| 2381 | return; | 2387 | return; |
| @@ -6236,6 +6242,8 @@ text to PROCESS after you call this function. */) | |||
| 6236 | emacs_close (XINT (XPROCESS (proc)->outfd)); | 6242 | emacs_close (XINT (XPROCESS (proc)->outfd)); |
| 6237 | #endif /* not HAVE_SHUTDOWN */ | 6243 | #endif /* not HAVE_SHUTDOWN */ |
| 6238 | new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0); | 6244 | new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0); |
| 6245 | if (new_outfd < 0) | ||
| 6246 | abort (); | ||
| 6239 | old_outfd = XINT (XPROCESS (proc)->outfd); | 6247 | old_outfd = XINT (XPROCESS (proc)->outfd); |
| 6240 | 6248 | ||
| 6241 | if (!proc_encode_coding_system[new_outfd]) | 6249 | if (!proc_encode_coding_system[new_outfd]) |