|
|
86e716e |
From 9faf077b85098436ac29b9369bfc7d8a9286fbd3 Mon Sep 17 00:00:00 2001
|
|
|
86e716e |
From: Eike Rathke <erack@redhat.com>
|
|
|
86e716e |
Date: Mon, 23 Jan 2012 15:43:50 +0100
|
|
|
86e716e |
Subject: [PATCH 4/5] resolved rhbz#783556 crash in ScMatrix::GetDimensons()
|
|
|
86e716e |
from ScInterpreter
|
|
|
86e716e |
|
|
|
86e716e |
* Interpreter tried to access a nonexistent matrix for external reference.
|
|
|
86e716e |
* In ScInterpreter::PopExternalDoubleRef(ScMatrixRef& rMat) set error for
|
|
|
86e716e |
unexpected conditions. In caller or descendants check for error or presence
|
|
|
86e716e |
of ScMatrix.
|
|
|
86e716e |
---
|
|
|
86e716e |
sc/source/core/tool/interpr4.cxx | 11 ++++++++++-
|
|
|
86e716e |
1 files changed, 10 insertions(+), 1 deletions(-)
|
|
|
86e716e |
|
|
|
86e716e |
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
|
|
|
86e716e |
index 07ff54b..424c713 100644
|
|
|
86e716e |
--- a/sc/source/core/tool/interpr4.cxx
|
|
|
86e716e |
+++ b/sc/source/core/tool/interpr4.cxx
|
|
|
86e716e |
@@ -1285,6 +1285,8 @@ ScDBRangeBase* ScInterpreter::PopDBDoubleRef()
|
|
|
86e716e |
pMat = PopMatrix();
|
|
|
86e716e |
else
|
|
|
86e716e |
PopExternalDoubleRef(pMat);
|
|
|
86e716e |
+ if (nGlobalError)
|
|
|
86e716e |
+ break;
|
|
|
86e716e |
return new ScDBExternalRange(pDok, pMat);
|
|
|
86e716e |
}
|
|
|
86e716e |
default:
|
|
|
86e716e |
@@ -1535,7 +1537,14 @@ void ScInterpreter::PopExternalDoubleRef(ScMatrixRef& rMat)
|
|
|
86e716e |
// references, which means the array should only contain a
|
|
|
86e716e |
// single matrix token.
|
|
|
86e716e |
ScToken* p = static_cast<ScToken*>(pArray->First());
|
|
|
86e716e |
- rMat = p->GetMatrix();
|
|
|
86e716e |
+ if (!p || p->GetType() != svMatrix)
|
|
|
86e716e |
+ SetError( errIllegalParameter);
|
|
|
86e716e |
+ else
|
|
|
86e716e |
+ {
|
|
|
86e716e |
+ rMat = p->GetMatrix();
|
|
|
86e716e |
+ if (!rMat)
|
|
|
86e716e |
+ SetError( errUnknownVariable);
|
|
|
86e716e |
+ }
|
|
|
86e716e |
}
|
|
|
86e716e |
|
|
|
86e716e |
void ScInterpreter::GetExternalDoubleRef(
|
|
|
86e716e |
--
|
|
|
86e716e |
1.7.7.6
|
|
|
86e716e |
|