Kaydet (Commit) bfd51e38 authored tarafından Eike Rathke's avatar Eike Rathke Kaydeden (comit) Caolán McNamara

Resolves: tdf#94869 propagate error when obtaining a scalar double value

... if any operation like popping a value or calculating an intersection
resulted in error, so the error gets passed as double error to matrix
operations where one operand is a scalar value.

Change-Id: I909ba25545625b827ce790e07d1ebe8643154703
(cherry picked from commit 934e4795)
Reviewed-on: https://gerrit.libreoffice.org/19235Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 06a66af0
......@@ -1082,7 +1082,7 @@ double ScInterpreter::PopDouble()
}
else
SetError( errUnknownStackVariable);
return 0.0;
return CreateDoubleError( nGlobalError);
}
svl::SharedString ScInterpreter::PopString()
......@@ -2186,7 +2186,10 @@ bool ScInterpreter::DoubleRefToPosSingleRef( const ScRange& rRange, ScAddress& r
double ScInterpreter::GetDoubleFromMatrix(const ScMatrixRef& pMat)
{
if (!pMat)
return 0.0;
{
SetError( errParameterExpected);
return CreateDoubleError( nGlobalError);
}
if ( !pJumpMatrix )
return pMat->GetDouble( 0 );
......@@ -2199,7 +2202,7 @@ double ScInterpreter::GetDoubleFromMatrix(const ScMatrixRef& pMat)
return pMat->GetDouble( nC, nR);
SetError( errNoValue);
return 0.0;
return CreateDoubleError( nGlobalError);
}
double ScInterpreter::GetDouble()
......@@ -2233,8 +2236,6 @@ double ScInterpreter::GetDouble()
aCell.assign(*pDok, aAdr);
nVal = GetCellValue(aAdr, aCell);
}
else
nVal = 0.0;
}
break;
case svExternalSingleRef:
......@@ -2263,7 +2264,6 @@ double ScInterpreter::GetDouble()
break;
case svError:
PopError();
nVal = 0.0;
break;
case svEmptyCell:
case svMissing:
......@@ -2273,8 +2273,16 @@ double ScInterpreter::GetDouble()
default:
PopError();
SetError( errIllegalParameter);
nVal = 0.0;
}
// Propagate error also as double error, so matrix operations where one
// operand is a scalar get that propagated if there is no specific
// nGlobalError check, and when the matrix is pushed the error is cleared
// because the matrix is assumed to hold double errors at the corresponding
// positions. See PushMatrix().
if (nGlobalError)
nVal = CreateDoubleError( nGlobalError);
if ( nFuncFmtType == nCurFmtType )
nFuncFmtIndex = nCurFmtIndex;
return nVal;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment