mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-16 22:37:30 +08:00
Tests/RunCMake/execute_process: Check STARTUPINFOW reserved members
Verify that `execute_process` launches processes on Windows such that `GetStartupInfoW` in the child does not populate `STARTUPINFOW` members reserved for the MSVC C run-time. Issue: #25996
This commit is contained in:
@@ -513,6 +513,10 @@ set(execute_process_ARGS
|
||||
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||
list(APPEND execute_process_ARGS -DTEST_ENCODING_EXE=$<TARGET_FILE:testEncoding>)
|
||||
endif()
|
||||
if(WIN32)
|
||||
add_executable(testStartupInfo testStartupInfo.c)
|
||||
list(APPEND execute_process_ARGS -DTEST_STARTUPINFO_EXE=$<TARGET_FILE:testStartupInfo>)
|
||||
endif()
|
||||
add_RunCMake_test(execute_process)
|
||||
add_RunCMake_test(export)
|
||||
if(CMake_TEST_MSYSTEM_PREFIX)
|
||||
|
@@ -53,3 +53,7 @@ if(WIN32 OR CYGWIN)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
run_cmake_command(WindowsNoExtension-build ${CMAKE_COMMAND} --build . --config Debug --target RunScript)
|
||||
endif()
|
||||
|
||||
if(TEST_STARTUPINFO_EXE)
|
||||
run_cmake_script(StartupInfo -DTEST_STARTUPINFO_EXE=${TEST_STARTUPINFO_EXE})
|
||||
endif()
|
||||
|
1
Tests/RunCMake/execute_process/StartupInfo.cmake
Normal file
1
Tests/RunCMake/execute_process/StartupInfo.cmake
Normal file
@@ -0,0 +1 @@
|
||||
execute_process(COMMAND "${TEST_STARTUPINFO_EXE}" COMMAND_ERROR_IS_FATAL ANY)
|
25
Tests/RunCMake/testStartupInfo.c
Normal file
25
Tests/RunCMake/testStartupInfo.c
Normal file
@@ -0,0 +1,25 @@
|
||||
#ifndef _CRT_SECURE_NO_WARNINGS
|
||||
# define _CRT_SECURE_NO_WARNINGS
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1928
|
||||
# pragma warning(disable : 5105) /* macro expansion warning in windows.h */
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
STARTUPINFOW si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
GetStartupInfoW(&si);
|
||||
if (si.cbReserved2 != 0 || si.lpReserved2 != NULL) {
|
||||
fprintf(stderr, "si.cbReserved2: %u\n", si.cbReserved2);
|
||||
fprintf(stderr, "si.lpReserved2: %p\n", si.lpReserved2);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user