Piotr Caban : msvcrt: Don't crash on NULL in fclose.

Alexandre Julliard julliard at winehq.org
Mon Oct 11 15:41:36 CDT 2021


Module: wine
Branch: master
Commit: bb637469e13fe33220ca8eef95a26608b343d92a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=bb637469e13fe33220ca8eef95a26608b343d92a

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Oct 11 16:15:32 2021 +0200

msvcrt: Don't crash on NULL in fclose.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/file.c       | 4 ++++
 dlls/msvcrt/tests/file.c | 3 +++
 2 files changed, 7 insertions(+)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index b0eeaf2a351..da43316ebb8 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -3616,6 +3616,8 @@ int CDECL fclose(FILE* file)
 {
   int ret;
 
+  if (!MSVCRT_CHECK_PMT(file != NULL)) return EOF;
+
   _lock_file(file);
   ret = _fclose_nolock(file);
   _unlock_file(file);
@@ -3630,6 +3632,8 @@ int CDECL _fclose_nolock(FILE* file)
 {
   int r, flag;
 
+  if (!MSVCRT_CHECK_PMT(file != NULL)) return EOF;
+
   if(!(file->_flag & (_IOREAD | _IOWRT | _IORW)))
   {
       file->_flag = 0;
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index 1d74c6135b8..7a33ae24230 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -1878,6 +1878,9 @@ static void test_fopen_fclose_fcloseall( void )
     ret = fclose(stream3);
     ok(ret == EOF, "Closing file '%s' returned %d\n", fname3, ret);
     ok(errno == 0xdeadbeef, "errno = %d\n", errno);
+    ret = fclose(NULL);
+    ok(ret == EOF, "Closing NULL file returned %d\n", ret);
+    ok(errno = EINVAL, "errno = %d\n", errno);
 
     /* testing fcloseall() */
     numclosed = _fcloseall();




More information about the wine-cvs mailing list