[KMTESTS] Allocate buffer for the test list dynamically

Fixes broken test list output.
Addendum to 7c3a119d6d. CORE-20078
This commit is contained in:
Stanislav Motylkov 2025-06-04 22:04:03 +02:00
parent fbd676f4c9
commit 21d02b8266

View file

@ -112,19 +112,33 @@ ListTests(
IN BOOLEAN IncludeHidden) IN BOOLEAN IncludeHidden)
{ {
DWORD Error = ERROR_SUCCESS; DWORD Error = ERROR_SUCCESS;
CHAR Buffer[1024]; PSTR Buffer = NULL;
DWORD BytesRead; DWORD BufferSize = 1024;
PCSTR TestName = Buffer; DWORD BytesRead = BufferSize;
PCSTR TestName;
PCKMT_TEST TestEntry = TestList; PCKMT_TEST TestEntry = TestList;
PCSTR NextTestName; PCSTR NextTestName;
puts("Valid test names:"); puts("Valid test names:");
// get test list from driver // get test list from driver
if (!DeviceIoControl(KmtestHandle, IOCTL_KMTEST_GET_TESTS, NULL, 0, Buffer, sizeof Buffer, &BytesRead, NULL)) while (TRUE)
error_goto(Error, cleanup); {
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 // output test list plus user-mode tests
TestName = Buffer;
while (TestEntry->TestName || *TestName) while (TestEntry->TestName || *TestName)
{ {
if (!TestEntry->TestName) if (!TestEntry->TestName)
@ -167,6 +181,9 @@ ListTests(
} }
cleanup: cleanup:
if (Buffer)
HeapFree(GetProcessHeap(), 0, Buffer);
return Error; return Error;
} }