Skip to content

Commit 21d02b8

Browse files
committed
[KMTESTS] Allocate buffer for the test list dynamically
Fixes broken test list output. Addendum to 7c3a119. CORE-20078
1 parent fbd676f commit 21d02b8

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

modules/rostests/kmtests/kmtest/kmtest.c

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,19 +112,33 @@ ListTests(
112112
IN BOOLEAN IncludeHidden)
113113
{
114114
DWORD Error = ERROR_SUCCESS;
115-
CHAR Buffer[1024];
116-
DWORD BytesRead;
117-
PCSTR TestName = Buffer;
115+
PSTR Buffer = NULL;
116+
DWORD BufferSize = 1024;
117+
DWORD BytesRead = BufferSize;
118+
PCSTR TestName;
118119
PCKMT_TEST TestEntry = TestList;
119120
PCSTR NextTestName;
120121

121122
puts("Valid test names:");
122123

123124
// get test list from driver
124-
if (!DeviceIoControl(KmtestHandle, IOCTL_KMTEST_GET_TESTS, NULL, 0, Buffer, sizeof Buffer, &BytesRead, NULL))
125-
error_goto(Error, cleanup);
125+
while (TRUE)
126+
{
127+
Buffer = HeapAlloc(GetProcessHeap(), 0, BufferSize);
128+
if (!Buffer)
129+
error_goto(Error, cleanup);
130+
131+
if (!DeviceIoControl(KmtestHandle, IOCTL_KMTEST_GET_TESTS, NULL, 0, Buffer, BufferSize, &BytesRead, NULL))
132+
error_goto(Error, cleanup);
133+
if (BytesRead < BufferSize)
134+
break;
135+
136+
HeapFree(GetProcessHeap(), 0, Buffer);
137+
BufferSize *= 2;
138+
}
126139

127140
// output test list plus user-mode tests
141+
TestName = Buffer;
128142
while (TestEntry->TestName || *TestName)
129143
{
130144
if (!TestEntry->TestName)
@@ -167,6 +181,9 @@ ListTests(
167181
}
168182

169183
cleanup:
184+
if (Buffer)
185+
HeapFree(GetProcessHeap(), 0, Buffer);
186+
170187
return Error;
171188
}
172189

0 commit comments

Comments
 (0)