Module: wine Branch: master Commit: bb637469e13fe33220ca8eef95a26608b343d92a URL: https://source.winehq.org/git/wine.git/?a=commit;h=bb637469e13fe33220ca8eef9...
Author: Piotr Caban piotr@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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();