summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Power <noel.power@suse.com>2013-02-05 10:25:49 +0000
committerPetr Mladek <pmladek@suse.cz>2013-02-07 09:32:00 +0000
commit6644caf9048495ddb6174d7ec30daa7e20e2828e (patch)
tree4b92c92da7d57a7873320f6933d959660743f2f3
parentd68310c185886c6755849640d568c4597456282e (diff)
fix for fdo#60065
squash errors trying to gain object for rhs ( where no object yet exists ( Change-Id: I81548d1c6a32f0445dc18e31c84c3df85163ed45 Reviewed-on: https://gerrit.libreoffice.org/2003 Reviewed-by: Petr Mladek <pmladek@suse.cz> Tested-by: Petr Mladek <pmladek@suse.cz>
-rw-r--r--basic/qa/basic_coverage/uno_struct_assign.vb15
-rw-r--r--basic/source/runtime/step0.cxx10
2 files changed, 25 insertions, 0 deletions
diff --git a/basic/qa/basic_coverage/uno_struct_assign.vb b/basic/qa/basic_coverage/uno_struct_assign.vb
new file mode 100644
index 000000000000..23812de2cd6a
--- /dev/null
+++ b/basic/qa/basic_coverage/uno_struct_assign.vb
@@ -0,0 +1,15 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+
+Function doUnitTest as Integer
+ Dim oNamedValue as new com.sun.star.beans.NamedValue
+ Dim oCellAddress as new com.sun.star.table.CellAddress
+ oNamedValue.Value = oCellAddress ' fdo#60065 - this would throw an error
+ doUnitTest = 1
+End Function
diff --git a/basic/source/runtime/step0.cxx b/basic/source/runtime/step0.cxx
index 5e41425b1748..2388722acbe5 100644
--- a/basic/source/runtime/step0.cxx
+++ b/basic/source/runtime/step0.cxx
@@ -388,7 +388,17 @@ inline bool checkUnoStructCopy( bool bVBA, SbxVariableRef& refVal, SbxVariableRe
if ( aAny.getValueType().getTypeClass() == TypeClass_STRUCT )
{
refVar->SetType( SbxOBJECT );
+ SbxError eOldErr = refVar->GetError();
+ // There are some circumstances when calling GetObject
+ // will trigger an error, we need to squash those here.
+ // Alternatively it is possible that the same scenario
+ // could overwrite and existing error. Lets prevent that
SbxObjectRef xVarObj = (SbxObject*)refVar->GetObject();
+ if ( eOldErr != SbxERR_OK )
+ refVar->SetError( eOldErr );
+ else
+ refVar->ResetError();
+
SbUnoStructRefObject* pUnoStructObj = PTR_CAST(SbUnoStructRefObject,(SbxObject*)xVarObj);
if ( ( !pUnoVal && !pUnoStructVal ) )