[PATCH] Change in core[libreoffice-3-6]: fdo#58242: sw: fix more crashes when not on SwTxtNode

Michael Stahl (via Code Review) gerrit at gerrit.libreoffice.org
Wed Jan 9 07:22:20 PST 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/1615

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/15/1615/1

fdo#58242: sw: fix more crashes when not on SwTxtNode

In getCrsrPropertyValue etc.; also add a unit test for the problem.

(cherry picked from commit 68d40d2cae3700f4134375fcaf9649ac626ada7d)

Conflicts:
	sw/qa/complex/writer/CheckTable.java

Change-Id: Ibd459a43393c39b4fed9fb89aae4a5f7bacff007
---
M sw/source/core/unocore/unocrsrhelper.cxx
M sw/source/core/unocore/unoobj.cxx
M sw/source/core/unocore/unoobj2.cxx
3 files changed, 16 insertions(+), 6 deletions(-)



diff --git a/sw/source/core/unocore/unocrsrhelper.cxx b/sw/source/core/unocore/unocrsrhelper.cxx
index e41d237..aa9cc45 100644
--- a/sw/source/core/unocore/unocrsrhelper.cxx
+++ b/sw/source/core/unocore/unocrsrhelper.cxx
@@ -497,9 +497,9 @@
         case FN_UNO_CHARFMT_SEQUENCE:
         {
 
-            SwTxtNode* pTxtNode;
-            if((pTxtNode = (SwTxtNode*)rPam.GetNode( sal_True )) == rPam.GetNode(sal_False) &&
-                    pTxtNode->GetpSwpHints())
+            SwTxtNode *const pTxtNode = rPam.GetNode()->GetTxtNode();
+            if (rPam.GetNode(sal_True) == rPam.GetNode(sal_False)
+                && pTxtNode && pTxtNode->GetpSwpHints())
             {
                 sal_uInt16 nPaMStart = rPam.GetPoint()->nContent.GetIndex();
                 sal_uInt16 nPaMEnd = rPam.GetMark() ? rPam.GetMark()->nContent.GetIndex() : nPaMStart;
@@ -951,6 +951,11 @@
     xub_StrLen nStartIdx = 0;
     SwTxtNode* const pTxtNd =
         rNewCursor.GetPoint()->nNode.GetNode().GetTxtNode();
+    if (!pTxtNd)
+    {
+        SAL_INFO("sw.uno", "DocInsertStringSplitCR: need a text node");
+        return false;
+    }
     const xub_StrLen nMaxLength = ( pTxtNd )
         ? STRING_LEN - pTxtNd->GetTxt().Len()
         : STRING_LEN;
diff --git a/sw/source/core/unocore/unoobj.cxx b/sw/source/core/unocore/unoobj.cxx
index 3bba084..d400286 100644
--- a/sw/source/core/unocore/unoobj.cxx
+++ b/sw/source/core/unocore/unoobj.cxx
@@ -556,6 +556,10 @@
         {
             // multi selection is not considered
             SwTxtNode *const pTxtNd = rPam.GetNode()->GetTxtNode();
+            if (!pTxtNd)
+            {
+                throw lang::IllegalArgumentException();
+            }
             if (FN_UNO_NUM_LEVEL == rEntry.nWID)
             {
                 sal_Int16 nLevel = 0;
diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx
index ea121c1..6e0bf2f 100644
--- a/sw/source/core/unocore/unoobj2.cxx
+++ b/sw/source/core/unocore/unoobj2.cxx
@@ -1851,9 +1851,10 @@
         FrameDependList_t & rFrames)
 {
     // search for objects at the cursor - anchored at/as char
-    SwTxtAttr const*const pTxtAttr =
-        rUnoCrsr.GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
-            rUnoCrsr.GetPoint()->nContent.GetIndex(), RES_TXTATR_FLYCNT);
+    SwTxtAttr const*const pTxtAttr = (rUnoCrsr.GetNode()->IsTxtNode())
+        ? rUnoCrsr.GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
+            rUnoCrsr.GetPoint()->nContent.GetIndex(), RES_TXTATR_FLYCNT)
+        : 0;
     if (pTxtAttr)
     {
         const SwFmtFlyCnt& rFlyCnt = pTxtAttr->GetFlyCnt();

-- 
To view, visit https://gerrit.libreoffice.org/1615
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibd459a43393c39b4fed9fb89aae4a5f7bacff007
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-3-6
Gerrit-Owner: Michael Stahl <mstahl at redhat.com>



More information about the LibreOffice mailing list