Ver código fonte

foreach: Fix crash parsing integer out of range

Ben McMorran 5 anos atrás
pai
commit
0412b55b83

+ 6 - 0
Source/cmForEachCommand.cxx

@@ -365,6 +365,12 @@ bool TryParseInteger(cmExecutionStatus& status, const std::string& str, int& i)
     status.SetError(e.str());
     cmSystemTools::SetFatalErrorOccured();
     return false;
+  } catch (std::out_of_range&) {
+    std::ostringstream e;
+    e << "Integer out of range: '" << str << "'";
+    status.SetError(e.str());
+    cmSystemTools::SetFatalErrorOccured();
+    return false;
   }
 
   return true;

+ 1 - 0
Tests/RunCMake/foreach/RunCMakeTest.cmake

@@ -19,3 +19,4 @@ run_cmake(foreach-RANGE-non-int-test-3-1)
 run_cmake(foreach-RANGE-non-int-test-3-2)
 run_cmake(foreach-RANGE-non-int-test-3-3)
 run_cmake(foreach-RANGE-invalid-test)
+run_cmake(foreach-RANGE-out-of-range-test)

+ 1 - 0
Tests/RunCMake/foreach/foreach-RANGE-out-of-range-test-result.txt

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

+ 4 - 0
Tests/RunCMake/foreach/foreach-RANGE-out-of-range-test-stderr.txt

@@ -0,0 +1,4 @@
+^CMake Error at foreach-RANGE-out-of-range-test\.cmake:[0-9]+ \(foreach\):
+  foreach Integer out of range: '10000000000000000000'
+Call Stack \(most recent call first\):
+  CMakeLists\.txt:3 \(include\)$

+ 3 - 0
Tests/RunCMake/foreach/foreach-RANGE-out-of-range-test.cmake

@@ -0,0 +1,3 @@
+foreach(a RANGE 10000000000000000000)
+  break()
+endforeach()