From 514f368a8835657033937985dd04ec523a12a249 Mon Sep 17 00:00:00 2001 From: Aliaksandr Date: Wed, 22 Apr 2026 23:22:54 +0300 Subject: [PATCH] Fix: Prevent usage of uninitialized memory --- dll/win32/kernel32/client/file/rw.c | 4 +++ .../rostests/apitests/kernel32/CMakeLists.txt | 1 + .../apitests/kernel32/ReadWriteFile.c | 32 +++++++++++++++++++ modules/rostests/apitests/kernel32/testlist.c | 4 +++ 4 files changed, 41 insertions(+) create mode 100644 modules/rostests/apitests/kernel32/ReadWriteFile.c diff --git a/dll/win32/kernel32/client/file/rw.c b/dll/win32/kernel32/client/file/rw.c index 8fc10d2ae37..a5bbc8fc3d5 100644 --- a/dll/win32/kernel32/client/file/rw.c +++ b/dll/win32/kernel32/client/file/rw.c @@ -78,6 +78,8 @@ WriteFile(IN HANDLE hFile, { IO_STATUS_BLOCK Iosb; + Iosb.Information = 0; + Status = NtWriteFile(hFile, NULL, NULL, @@ -189,6 +191,8 @@ ReadFile(IN HANDLE hFile, { IO_STATUS_BLOCK Iosb; + Iosb.Information = 0; + Status = NtReadFile(hFile, NULL, NULL, diff --git a/modules/rostests/apitests/kernel32/CMakeLists.txt b/modules/rostests/apitests/kernel32/CMakeLists.txt index bba783049c3..862f07e1623 100644 --- a/modules/rostests/apitests/kernel32/CMakeLists.txt +++ b/modules/rostests/apitests/kernel32/CMakeLists.txt @@ -34,6 +34,7 @@ list(APPEND SOURCE MultiByteToWideChar.c Pipes.c PrivMoveFileIdentityW.c + ReadWriteFile.c QueueUserAPC.c SetComputerNameExW.c SetConsoleWindowInfo.c diff --git a/modules/rostests/apitests/kernel32/ReadWriteFile.c b/modules/rostests/apitests/kernel32/ReadWriteFile.c new file mode 100644 index 00000000000..9f4b75dc5b8 --- /dev/null +++ b/modules/rostests/apitests/kernel32/ReadWriteFile.c @@ -0,0 +1,32 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) + * PURPOSE: Tests for ReadFile, WriteFile + * COPYRIGHT: Copyright 2026 Aliaksandr Lebiadzevich (bsalex2025@gmail.com) + */ + + #include "precomp.h" + +START_TEST(ReadFile) +{ + BOOL Success; + DWORD BytesRead = 1; + char Buffer[1] = {0}; + + Success = ReadFile( INVALID_HANDLE_VALUE, Buffer, sizeof(Buffer), &BytesRead, NULL ); + + ok( !Success, "ReadFile should have returned FALSE" ); + ok( BytesRead == 0, "BytesRead should be 0" ); +} + +START_TEST(WriteFile) +{ + BOOL Success; + DWORD BytesWritten = 1; + char Buffer[1] = {0}; + + Success = WriteFile( INVALID_HANDLE_VALUE, Buffer, sizeof(Buffer), &BytesWritten, NULL ); + + ok( !Success, "WriteFile should have returned FALSE" ); + ok( BytesWritten == 0, "BytesWritten should be 0" ); +} diff --git a/modules/rostests/apitests/kernel32/testlist.c b/modules/rostests/apitests/kernel32/testlist.c index 3bec920a41c..2cb529726be 100644 --- a/modules/rostests/apitests/kernel32/testlist.c +++ b/modules/rostests/apitests/kernel32/testlist.c @@ -33,6 +33,7 @@ extern void func_Mailslot(void); extern void func_MultiByteToWideChar(void); extern void func_Pipes(void); extern void func_PrivMoveFileIdentityW(void); +extern void func_ReadFile(void); extern void func_QueueUserAPC(void); extern void func_SetComputerNameExW(void); extern void func_SetConsoleWindowInfo(void); @@ -43,6 +44,7 @@ extern void func_TerminateProcess(void); extern void func_TunnelCache(void); extern void func_UEFIFirmware(void); extern void func_WideCharToMultiByte(void); +extern void func_WriteFile(void); const struct test winetest_testlist[] = { @@ -77,6 +79,7 @@ const struct test winetest_testlist[] = { "MultiByteToWideChar", func_MultiByteToWideChar }, { "Pipes", func_Pipes }, { "PrivMoveFileIdentityW", func_PrivMoveFileIdentityW }, + { "ReadFile", func_ReadFile }, { "QueueUserAPC", func_QueueUserAPC }, { "SetComputerNameExW", func_SetComputerNameExW }, { "SetConsoleWindowInfo", func_SetConsoleWindowInfo }, @@ -87,5 +90,6 @@ const struct test winetest_testlist[] = { "TunnelCache", func_TunnelCache }, { "UEFIFirmware", func_UEFIFirmware }, { "WideCharToMultiByte", func_WideCharToMultiByte }, + { "WriteFile", func_WriteFile }, { 0, 0 } }; -- 2.45.1.windows.1