Author: af
Date: Mon Jul 1 15:10:21 2013
New Revision: 1498507
URL: http://svn.apache.org/r1498507
Log:
121479: Prevent crash when loading some RTF documents.
Modified:
openoffice/trunk/main/sw/source/core/docnode/nodes.cxx
Modified: openoffice/trunk/main/sw/source/core/docnode/nodes.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/docnode/nodes.cxx?rev=1498507&r1=1498506&r2=1498507&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/docnode/nodes.cxx (original)
+++ openoffice/trunk/main/sw/source/core/docnode/nodes.cxx Mon Jul 1 15:10:21
2013
@@ -522,6 +522,30 @@ sal_Bool SwNodes::_MoveNodes( const SwNo
sal_uInt16 nSectNdCnt = 0;
sal_Bool bSaveNewFrms = bNewFrms;
+ // Check that the range of nodes to move is valid.
+ // This is a very specific test that only checks that table nodes
+ // are completely covered by the range. Issue 121479 has a
+ // document for which this test fails.
+ SwNodeIndex aNodeIndex (aRg.aEnd);
+ while (aNodeIndex > aRg.aStart)
+ {
+ SwNode* pNode = rNodes[aNodeIndex.GetIndex()];
+ if (pNode->GetNodeType() != ND_ENDNODE)
+ break;
+ SwStartNode* pStartNode = pNode->pStartOfSection;
+ if (pStartNode==NULL)
+ break;
+ if ( ! pStartNode->IsTableNode())
+ break;
+ aNodeIndex = *pStartNode;
+ if (aNodeIndex < aRg.aStart.GetIndex())
+ {
+ return sal_False;
+ }
+ --aNodeIndex;
+ }
+
+
// bis alles verschoben ist
while( aRg.aStart < aRg.aEnd )
switch( (pAktNode = &aRg.aEnd.GetNode())->GetNodeType() )