Browse Source

CPack: Fix crash on invalid generator name

In commit v3.11.0-rc1~68^2 (CPack: accept --trace and --trace-expand,
2017-12-09) a nullptr dereference was added that occurs when
`cpack -G NotAGenerator` is invoked.  Add the needed condition.

Fixes: #17900
Brad King 7 years ago
parent
commit
6f2701abf6

+ 4 - 4
Source/CPack/cpack.cxx

@@ -350,16 +350,16 @@ int main(int argc, char const* const* argv)
         }
         if (parsed) {
           cpackGenerator = generators.NewGenerator(gen);
-          if (!cpackGenerator) {
+          if (cpackGenerator) {
+            cpackGenerator->SetTrace(trace);
+            cpackGenerator->SetTraceExpand(traceExpand);
+          } else {
             cmCPack_Log(&log, cmCPackLog::LOG_ERROR,
                         "Cannot initialize CPack generator: " << gen
                                                               << std::endl);
             parsed = 0;
           }
 
-          cpackGenerator->SetTrace(trace);
-          cpackGenerator->SetTraceExpand(traceExpand);
-
           if (parsed && !cpackGenerator->Initialize(gen, mf)) {
             cmCPack_Log(&log, cmCPackLog::LOG_ERROR,
                         "Cannot initialize the generator " << gen

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -335,6 +335,7 @@ add_RunCMake_test(CommandLine -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
 add_RunCMake_test(CommandLineTar)
 
 add_RunCMake_test(install)
+add_RunCMake_test(CPackCommandLine)
 add_RunCMake_test(CPackConfig)
 add_RunCMake_test(CPackInstallProperties)
 add_RunCMake_test(ExternalProject)

+ 1 - 0
Tests/RunCMake/CPackCommandLine/NotAGenerator-result.txt

@@ -0,0 +1 @@
+1

+ 1 - 0
Tests/RunCMake/CPackCommandLine/NotAGenerator-stderr.txt

@@ -0,0 +1 @@
+^CPack Error: Cannot initialize CPack generator: NotAGenerator

+ 10 - 0
Tests/RunCMake/CPackCommandLine/RunCMakeTest.cmake

@@ -0,0 +1,10 @@
+include(RunCMake)
+set(RunCMake_TEST_TIMEOUT 60)
+
+file(WRITE "${RunCMake_BINARY_DIR}/NotAGenerator-build/CPackConfig.cmake" [[
+set(CPACK_PACKAGE_NAME "Test")
+set(CPACK_PACKAGE_VERSION "1")
+]])
+set(RunCMake_TEST_NO_CLEAN 1)
+run_cmake_command(NotAGenerator ${CMAKE_CPACK_COMMAND} -G NotAGenerator)
+unset(RunCMake_TEST_NO_CLEAN)