Alexandre Julliard : server: Don'
t crash when trying to set a file lock on a device.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Jun 20 09:13:44 CDT 2007
Module: wine
Branch: master
Commit: 60901b7542e68e466b457cadfe726100f7737387
URL: http://source.winehq.org/git/wine.git/?a=commit;h=60901b7542e68e466b457cadfe726100f7737387
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Jun 20 13:14:55 2007 +0200
server: Don't crash when trying to set a file lock on a device.
---
server/fd.c | 12 ++++++------
server/trace.c | 1 +
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/server/fd.c b/server/fd.c
index 7a7d572..cf3a306 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -1184,12 +1184,6 @@ static struct file_lock *add_lock( struct fd *fd, int shared, file_pos_t start,
{
struct file_lock *lock;
- if (!fd->inode) /* not a regular file */
- {
- set_error( STATUS_INVALID_HANDLE );
- return NULL;
- }
-
if (!(lock = alloc_object( &file_lock_ops ))) return NULL;
lock->shared = shared;
lock->start = start;
@@ -1259,6 +1253,12 @@ obj_handle_t lock_fd( struct fd *fd, file_pos_t start, file_pos_t count, int sha
struct list *ptr;
file_pos_t end = start + count;
+ if (!fd->inode) /* not a regular file */
+ {
+ set_error( STATUS_INVALID_DEVICE_REQUEST );
+ return 0;
+ }
+
/* don't allow wrapping locks */
if (end && end < start)
{
diff --git a/server/trace.c b/server/trace.c
index 312b68d..3dd614a 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -4246,6 +4246,7 @@ static const struct
{ "ILLEGAL_FUNCTION", STATUS_ILLEGAL_FUNCTION },
{ "INSTANCE_NOT_AVAILABLE", STATUS_INSTANCE_NOT_AVAILABLE },
{ "INVALID_CID", STATUS_INVALID_CID },
+ { "INVALID_DEVICE_REQUEST", STATUS_INVALID_DEVICE_REQUEST },
{ "INVALID_FILE_FOR_SECTION", STATUS_INVALID_FILE_FOR_SECTION },
{ "INVALID_HANDLE", STATUS_INVALID_HANDLE },
{ "INVALID_PARAMETER", STATUS_INVALID_PARAMETER },
More information about the wine-cvs
mailing list