[PATCH 4/4] ntdll: Return an error from CDROM_Open if fstat fails.

Alex Henrie alexhenrie24 at gmail.com
Tue Dec 29 23:37:59 CST 2015


Cc: Marcus Meissner <marcus at jet.franken.de>

Coverity #211202, "check_return: Calling fstat(fd, &st) without checking
return value. This library function may fail and return an error code."

Really, the only possible error here is EIO, but we should still check
for it.

Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 dlls/ntdll/cdrom.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c
index ee2a743..eb866b7 100644
--- a/dlls/ntdll/cdrom.c
+++ b/dlls/ntdll/cdrom.c
@@ -667,10 +667,16 @@ static NTSTATUS CDROM_Open(int fd, int* dev)
     NTSTATUS ret = STATUS_SUCCESS;
     int         empty = -1;
 
-    fstat(fd, &st);
+    *dev = 0;
+
+    if (fstat(fd, &st) == -1)
+    {
+        ret = FILE_GetNtStatus();
+        goto error;
+    }
 
     RtlEnterCriticalSection( &cache_section );
-    for (*dev = 0; *dev < MAX_CACHE_ENTRIES; (*dev)++)
+    while (*dev < MAX_CACHE_ENTRIES)
     {
         if (empty == -1 &&
             cdrom_cache[*dev].device == 0 &&
@@ -679,6 +685,7 @@ static NTSTATUS CDROM_Open(int fd, int* dev)
         else if (cdrom_cache[*dev].device == st.st_dev &&
                  cdrom_cache[*dev].inode == st.st_ino)
             break;
+        (*dev)++;
     }
     if (*dev == MAX_CACHE_ENTRIES)
     {
@@ -692,6 +699,7 @@ static NTSTATUS CDROM_Open(int fd, int* dev)
     }
     RtlLeaveCriticalSection( &cache_section );
 
+error:
     TRACE("%d, %d\n", *dev, fd);
     return ret;
 }
-- 
2.6.4




More information about the wine-patches mailing list