- fix 2699
[oweals/gnunet.git] / src / util / os_priority.c
index 2d5dba4a311ff8fd47387c64fd498ea352825163..983da42b17bb5f35015dc588895ee80286967bdc 100644 (file)
@@ -151,11 +151,18 @@ GNUNET_OS_install_parent_control_handler (void *cls,
     putenv (GNUNET_OS_CONTROL_PIPE "=");
     return;
   }
+  if (pipe_fd >= FD_SETSIZE)
+  {
+    LOG (GNUNET_ERROR_TYPE_ERROR,
+         "GNUNET_OS_CONTROL_PIPE `%s' contains garbage?\n", env_buf);
+    putenv (GNUNET_OS_CONTROL_PIPE "=");
+    return;
+  }
   /* Gcc will issue a warning here. What to do with it? */
 #if WINDOWS
   control_pipe = GNUNET_DISK_get_handle_from_w32_handle ((HANDLE) pipe_fd);
 #else
-  control_pipe = GNUNET_DISK_get_handle_from_crt_fd ((int) pipe_fd);
+  control_pipe = GNUNET_DISK_get_handle_from_int_fd ((int) pipe_fd);
 #endif
   if (NULL == control_pipe)
   {
@@ -655,6 +662,7 @@ start_process (int pipe_control,
   {
     childpipe_read = NULL;
     childpipe_write = NULL;
+    childpipe_read_fd = -1;
   }
   if (NULL != pipe_stdout)
   {
@@ -730,6 +738,8 @@ start_process (int pipe_control,
     snprintf (fdbuf, 100, "%x", childpipe_read_fd);
     setenv (GNUNET_OS_CONTROL_PIPE, fdbuf, 1);
   }
+  else
+    unsetenv (GNUNET_OS_CONTROL_PIPE);
   if (NULL != pipe_stdin)
   {
     GNUNET_break (0 == close (fd_stdin_write));