Sebastian Lackner : server: Avoid leaking file descriptor on error in create_file_for_fd.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 18 10:25:18 CST 2014
Module: wine
Branch: master
Commit: 3d3c92782a3ef14ba62d751ba1e321bba19a891a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d3c92782a3ef14ba62d751ba1e321bba19a891a
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Mon Nov 17 19:19:08 2014 +0100
server: Avoid leaking file descriptor on error in create_file_for_fd.
---
server/file.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/server/file.c b/server/file.c
index cceb8ad..abda2c3 100644
--- a/server/file.c
+++ b/server/file.c
@@ -120,21 +120,25 @@ struct file *create_file_for_fd( int fd, unsigned int access, unsigned int shari
if (fstat( fd, &st ) == -1)
{
file_set_error();
+ close( fd );
return NULL;
}
- if ((file = alloc_object( &file_ops )))
+ if (!(file = alloc_object( &file_ops )))
{
- file->mode = st.st_mode;
- file->access = default_fd_map_access( &file->obj, access );
- if (!(file->fd = create_anonymous_fd( &file_fd_ops, fd, &file->obj,
- FILE_SYNCHRONOUS_IO_NONALERT )))
- {
- release_object( file );
- return NULL;
- }
- allow_fd_caching( file->fd );
+ close( fd );
+ return NULL;
+ }
+
+ file->mode = st.st_mode;
+ file->access = default_fd_map_access( &file->obj, access );
+ if (!(file->fd = create_anonymous_fd( &file_fd_ops, fd, &file->obj,
+ FILE_SYNCHRONOUS_IO_NONALERT )))
+ {
+ release_object( file );
+ return NULL;
}
+ allow_fd_caching( file->fd );
return file;
}
More information about the wine-cvs
mailing list