#12676 Add more guarding on valid data before use

Fix crash situation when computing delta between two large ensembles
This commit is contained in:
Magne Sjaastad committed 2025-07-28 15:29:36 +02:00
1 parent ff3773c85d
commit ad08969502
1 file changed
+12 -3
@@ -322,11 +322,17 @@ std::pair<std::vector<time_t>, std::vector<double>> RimDeltaSummaryCase::calcula
merger.addCurveData( reader1->timeSteps( address ), values1 );
merger.addCurveData( reader2->timeSteps( address ), values2 );
merger.computeInterpolatedValues( includeIncompleteCurves );
const std::vector<double>& allValues1 = merger.interpolatedYValuesForAllXValues( 0 );
const std::vector<double>& allValues2 = merger.interpolatedYValuesForAllXValues( 1 );
if ( merger.curveCount() < 2 )
{
// If we have less than two curves, we cannot calculate a delta
return ResultPair();
}
size_t sampleCount = merger.allXValues().size();
if ( sampleCount == 0 )
{
return ResultPair();
}
std::vector<double> calculatedValues;
calculatedValues.reserve( sampleCount );
@@ -334,6 +340,9 @@ std::pair<std::vector<time_t>, std::vector<double>> RimDeltaSummaryCase::calcula
int clampedIndexCase1 = std::min( fixedTimeStepCase1, static_cast<int>( values1.size() ) );
int clampedIndexCase2 = std::min( fixedTimeStepCase2, static_cast<int>( values2.size() ) );
const std::vector<double>& allValues1 = merger.interpolatedYValuesForAllXValues( 0 );
const std::vector<double>& allValues2 = merger.interpolatedYValuesForAllXValues( 1 );
for ( size_t i = 0; i < sampleCount; i++ )
{
double valueCase1 = clampedIndexCase1 >= 0 ? values1[clampedIndexCase1] : allValues1[i];