[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