From 2f94ff566f7827792175daedb92f12a7e61ad95d Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Fri, 20 May 2016 12:02:58 +0200 Subject: tdf#93101 correctly resolve svExternalSingleRef token in GetMatrix() ... including error propagation, and use GetNewMat() instead of a plain ScFullMatrix so the interpreter error handling is set up. Change-Id: I862c46f9afc2afd0bb2a23aa767158e0945583a5 --- sc/source/core/tool/interpr5.cxx | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx index 66b20f6cced5..e1ff66e2b642 100644 --- a/sc/source/core/tool/interpr5.cxx +++ b/sc/source/core/tool/interpr5.cxx @@ -455,25 +455,38 @@ ScMatrixRef ScInterpreter::GetMatrix() { ScExternalRefCache::TokenRef pToken; PopExternalSingleRef(pToken); - if (!pToken) + pMat = GetNewMat( 1, 1, true); + if (!pMat) { - PopError(); SetError( errIllegalArgument); break; } - if (pToken->GetType() == svDouble) + if (!pToken) { - pMat = new ScFullMatrix(1, 1, 0.0); - pMat->PutDouble(pToken->GetDouble(), 0, 0); + SetError( errIllegalArgument); + pMat->PutError( nGlobalError, 0, 0); + nGlobalError = 0; + break; } - else if (pToken->GetType() == svString) + if (nGlobalError) { - pMat = new ScFullMatrix(1, 1, 0.0); - pMat->PutString(pToken->GetString(), 0, 0); + pMat->PutError( nGlobalError, 0, 0); + nGlobalError = 0; + break; } - else + switch (pToken->GetType()) { - pMat = new ScFullMatrix(1, 1); + case svError: + pMat->PutError( pToken->GetError(), 0, 0); + break; + case svDouble: + pMat->PutDouble( pToken->GetDouble(), 0, 0); + break; + case svString: + pMat->PutString( pToken->GetString(), 0, 0); + break; + default: + ; // nothing, empty element matrix } } break; -- cgit v1.2.3