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