From 21d02b82668477ddafd24f204e3ecb3a4740a7dd Mon Sep 17 00:00:00 2001 From: Stanislav Motylkov Date: Wed, 4 Jun 2025 22:04:03 +0200 Subject: [PATCH] [KMTESTS] Allocate buffer for the test list dynamically Fixes broken test list output. Addendum to 7c3a119d6de. CORE-20078 --- modules/rostests/kmtests/kmtest/kmtest.c | 27 +++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/modules/rostests/kmtests/kmtest/kmtest.c b/modules/rostests/kmtests/kmtest/kmtest.c index a8d87807d32..c20341d7d7d 100644 --- a/modules/rostests/kmtests/kmtest/kmtest.c +++ b/modules/rostests/kmtests/kmtest/kmtest.c @@ -112,19 +112,33 @@ ListTests( IN BOOLEAN IncludeHidden) { DWORD Error = ERROR_SUCCESS; - CHAR Buffer[1024]; - DWORD BytesRead; - PCSTR TestName = Buffer; + PSTR Buffer = NULL; + DWORD BufferSize = 1024; + DWORD BytesRead = BufferSize; + PCSTR TestName; PCKMT_TEST TestEntry = TestList; PCSTR NextTestName; puts("Valid test names:"); // get test list from driver - if (!DeviceIoControl(KmtestHandle, IOCTL_KMTEST_GET_TESTS, NULL, 0, Buffer, sizeof Buffer, &BytesRead, NULL)) - error_goto(Error, cleanup); + while (TRUE) + { + Buffer = HeapAlloc(GetProcessHeap(), 0, BufferSize); + if (!Buffer) + error_goto(Error, cleanup); + + if (!DeviceIoControl(KmtestHandle, IOCTL_KMTEST_GET_TESTS, NULL, 0, Buffer, BufferSize, &BytesRead, NULL)) + error_goto(Error, cleanup); + if (BytesRead < BufferSize) + break; + + HeapFree(GetProcessHeap(), 0, Buffer); + BufferSize *= 2; + } // output test list plus user-mode tests + TestName = Buffer; while (TestEntry->TestName || *TestName) { if (!TestEntry->TestName) @@ -167,6 +181,9 @@ ListTests( } cleanup: + if (Buffer) + HeapFree(GetProcessHeap(), 0, Buffer); + return Error; }