#13874 CorrelationPlot: Fix crash when text parameters are present in ensemble

Add parameter.isNumeric() guard and bounds check in RimCorrelationMatrixPlot::createMatrix(). Text parameters deduplicate values into fewer entries than ensemble cases, causing out-of-bounds access. Add defensive bounds check in RimParameterResultCrossPlot::createCaseData() for consistency.
This commit is contained in:
Magne Sjaastad
2026-04-16 16:43:36 +02:00
parent bc7341bcd0
commit 791a58c9a7
2 changed files with 4 additions and 2 deletions
@@ -511,7 +511,7 @@ void RimCorrelationMatrixPlot::createMatrix()
RigEnsembleParameter parameter = ensemble->ensembleParameter( paramName );
if ( parameter.isValid() )
if ( parameter.isValid() && parameter.isNumeric() )
{
double correlation = std::numeric_limits<double>::infinity();
@@ -520,6 +520,8 @@ void RimCorrelationMatrixPlot::createMatrix()
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
if ( activeCases.count( summaryCase ) == 0 ) continue;
if ( caseIdx >= parameter.values.size() ) continue;
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
if ( reader )
{
@@ -514,7 +514,7 @@ std::vector<RimParameterResultCrossPlot::CaseData> RimParameterResultCrossPlot::
}
}
if ( summaryValue != std::numeric_limits<double>::infinity() )
if ( summaryValue != std::numeric_limits<double>::infinity() && caseIdx < parameter.values.size() )
{
caseData.push_back(
{ .parameterValue = parameter.values[caseIdx].toDouble(), .summaryValue = summaryValue, .summaryCase = summaryCase } );