[Libreoffice-commits] core.git: sw/qa sw/source

Caolán McNamara caolanm at redhat.com
Tue Aug 30 09:32:42 UTC 2016


 sw/qa/core/data/rtf/fail/table-1.rtf |binary
 sw/source/core/docnode/ndtbl.cxx     |   14 ++++++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

New commits:
commit 9accbfa0a52433cf03fe186fc69334d387981eb9
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Aug 30 10:20:33 2016 +0100

    fftester: non-contiguous cells
    
    Change-Id: I1bf57f6e365b9e99a1893b5333e043ac6bc7b476

diff --git a/sw/qa/core/data/rtf/fail/table-1.rtf b/sw/qa/core/data/rtf/fail/table-1.rtf
new file mode 100644
index 0000000..c333a10
Binary files /dev/null and b/sw/qa/core/data/rtf/fail/table-1.rtf differ
diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx
index 0abfc39..216070e 100644
--- a/sw/source/core/docnode/ndtbl.cxx
+++ b/sw/source/core/docnode/ndtbl.cxx
@@ -1181,6 +1181,7 @@ const SwTable* SwDoc::TextToTable( const std::vector< std::vector<SwNodeRange> >
         ++aRg.aEnd;
     }
 
+    bool bFailure = false;
 
     {
         // TODO: this is not Undo-able - only good enough for file import
@@ -1188,11 +1189,17 @@ const SwTable* SwDoc::TextToTable( const std::vector< std::vector<SwNodeRange> >
         SwNodeIndex const prev(rTableNodes.begin()->begin()->aStart, -1);
         SwNodeIndex const* pPrev(&prev);
         // pPrev could point to non-textnode now
-        for (auto row = rTableNodes.begin(); row != rTableNodes.end(); ++row)
+        for (auto row = rTableNodes.begin(); row != rTableNodes.end() && !bFailure; ++row)
         {
             for (auto cell = row->begin(); cell != row->end(); ++cell)
             {
-                assert(SwNodeIndex(*pPrev, +1) == cell->aStart);
+                bFailure = (SwNodeIndex(*pPrev, +1) != cell->aStart);
+                if (bFailure)
+                {
+                    SAL_WARN("sw.core", "cell start is not directly after previous cell end");
+                    break;
+                }
+
                 SwPaM pam(cell->aStart, 0, *pPrev,
                         (pPrev->GetNode().IsContentNode())
                             ? pPrev->GetNode().GetContentNode()->Len() : 0);
@@ -1212,6 +1219,9 @@ const SwTable* SwDoc::TextToTable( const std::vector< std::vector<SwNodeRange> >
 
     GetIDocumentUndoRedo().DoUndo(bUndo);
 
+    if (bFailure)
+        return nullptr;
+
     // Create the Box/Line/Table construct
     SwTableBoxFormat* pBoxFormat = MakeTableBoxFormat();
     SwTableLineFormat* pLineFormat = MakeTableLineFormat();


More information about the Libreoffice-commits mailing list