Sebastian Lackner : server: Always remove inflight fd if alloc_console fails.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Nov 20 09:54:15 CST 2014
Module: wine
Branch: master
Commit: 9aad600d8656b8515fb90989873030b28d3d8c9a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9aad600d8656b8515fb90989873030b28d3d8c9a
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Thu Nov 20 04:01:51 2014 +0100
server: Always remove inflight fd if alloc_console fails.
---
server/console.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/server/console.c b/server/console.c
index c83ec01..4c2d61d 100644
--- a/server/console.c
+++ b/server/console.c
@@ -1392,6 +1392,16 @@ DECL_HANDLER(alloc_console)
int fd;
int attach = 0;
+ if (req->input_fd != -1)
+ {
+ if ((fd = thread_get_inflight_fd( current, req->input_fd )) == -1)
+ {
+ set_error( STATUS_INVALID_PARAMETER );
+ return;
+ }
+ }
+ else fd = -1;
+
switch (req->pid)
{
case 0:
@@ -1399,6 +1409,7 @@ DECL_HANDLER(alloc_console)
renderer = current;
if (!(process = current->process->parent))
{
+ if (fd != -1) close( fd );
set_error( STATUS_ACCESS_DENIED );
return;
}
@@ -1415,23 +1426,19 @@ DECL_HANDLER(alloc_console)
default:
/* renderer is current, console to be attached to req->pid */
renderer = current;
- if (!(process = get_process_from_id( req->pid ))) return;
+ if (!(process = get_process_from_id( req->pid )))
+ {
+ if (fd != -1) close( fd );
+ return;
+ }
}
if (attach && process->console)
{
+ if (fd != -1) close( fd );
set_error( STATUS_ACCESS_DENIED );
goto the_end;
}
- if (req->input_fd != -1)
- {
- if ((fd = thread_get_inflight_fd( current, req->input_fd )) == -1)
- {
- set_error( STATUS_INVALID_PARAMETER );
- goto the_end;
- }
- }
- else fd = -1;
if ((console = (struct console_input*)create_console_input( renderer, fd )))
{
More information about the wine-cvs
mailing list