Index: inc/document.hxx =================================================================== --- inc/document.hxx (revision 1552212) +++ inc/document.hxx (working copy) @@ -503,6 +503,7 @@ ScFieldEditEngine* CreateFieldEditEngine(); void DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine); + // Note: the returned ScRangeName is volatile, and it can be changed at any time. SC_DLLPUBLIC ScRangeName* GetRangeName(); void SetRangeName( ScRangeName* pNewRangeName ); SCTAB GetMaxTableNumber() { return nMaxTableNumber; } Index: source/core/data/documen3.cxx =================================================================== --- source/core/data/documen3.cxx (revision 1552212) +++ source/core/data/documen3.cxx (working copy) @@ -95,6 +95,9 @@ void ScDocument::SetRangeName( ScRangeName* pNewRangeName ) { + if (pRangeName == pNewRangeName) + return; + if (pRangeName) delete pRangeName; pRangeName = pNewRangeName; Index: source/ui/unoobj/nameuno.cxx =================================================================== --- source/ui/unoobj/nameuno.cxx (revision 1552212) +++ source/ui/unoobj/nameuno.cxx (working copy) @@ -160,7 +160,7 @@ newNameScope = nameScope; //end of add - ScRangeName* pNewRanges = new ScRangeName( *pNames ); + //ScRangeName* pNewRanges = new ScRangeName( *pNames ); ScRangeData* pOld = (*pNames)[nPos]; String aInsName(pOld->GetName()); @@ -185,11 +185,11 @@ pNew->SetIndex( pOld->GetIndex() ); pNew->SetRangeScope(newNameScope); - pNewRanges->AtFree( nPos ); - if ( pNewRanges->Insert(pNew) ) + pNames->AtFree( nPos ); + if ( pNames->Insert(pNew) ) { ScDocFunc aFunc(*pDocShell); - aFunc.SetNewRangeNames( pNewRanges, sal_True ); + aFunc.SetNewRangeNames( pNames, sal_True ); aName = aInsName; //! broadcast? aScopeName = pNewScopeName ? *pNewScopeName : aScopeName; } @@ -196,7 +196,7 @@ else { delete pNew; //! uno::Exception/Fehler oder so - delete pNewRanges; + //delete pNewRanges; } } } @@ -596,7 +596,7 @@ String aContStr(aContent); if (pNames && !pNames->SearchName(aNameStr, nIndex,aScope)) { - ScRangeName* pNewRanges = new ScRangeName( *pNames ); + //ScRangeName* pNewRanges = new ScRangeName( *pNames ); // GRAM_PODF_A1 for API compatibility. ScRangeData* pNew = new ScRangeData( pDoc, aNameStr, aContStr, aPos, nNewType,formula::FormulaGrammar::GRAM_PODF_A1 );//GRAM_ODFF,// @@ -603,16 +603,16 @@ pNew->SetRangeScope(aScope); - if ( pNewRanges->Insert(pNew) ) + if ( pNames->Insert(pNew) ) { ScDocFunc aFunc(*pDocShell); - aFunc.SetNewRangeNames( pNewRanges, sal_True ); + aFunc.SetNewRangeNames( pNames, sal_True ); bDone = true; } else { delete pNew; - delete pNewRanges; + //delete pNewRanges; } } }