sw/source/core/unocore/unotbl.cxx |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

New commits:
commit 066cd52857ad9c2494c584bc36b38fc34836d10f
Author: LeMoyne Castle <lemoyne.cas...@gmail.com>
Date:   Tue Apr 25 22:44:16 2017 -0600

    tdf#107350 - prevent crash in unotbl.cxx
    
    check pointer and throw exception instead of SIGABRT
    when reading data from text tables that have
    varying row &/or col lengths from
     - merged cells after first row,
     - split cells in first row, etc.
    
    add backstop safety check -> exception because
     - complexity check fails (wrong/not called)
     - OOo uno api doc calls for exception when
           text table is 'too complex'
    v2:  better error message for crash point and
           its parallel (getData[Array])
    
    Change-Id: Ifb844c3e29042dab6b6cdb2448f7728e6ccb631d
    Reviewed-on: https://gerrit.libreoffice.org/37002
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Björn Michaelsen <bjoern.michael...@libreoffice.org>
    (cherry picked from commit eea79562f1a5785a8a22cde732a091725e46bbad)
    Reviewed-on: https://gerrit.libreoffice.org/37264
    Reviewed-by: Michael Stahl <mst...@redhat.com>

diff --git a/sw/source/core/unocore/unotbl.cxx 
b/sw/source/core/unocore/unotbl.cxx
index 0eab02785d22..4087921e9666 100644
--- a/sw/source/core/unocore/unotbl.cxx
+++ b/sw/source/core/unocore/unotbl.cxx
@@ -3697,7 +3697,7 @@ uno::Sequence<uno::Sequence<uno::Any>> SAL_CALL 
SwXCellRange::getDataArray()
         {
             auto pCell(static_cast<SwXCell*>(pCurrentCell->get()));
             if(!pCell)
-                throw uno::RuntimeException();
+                throw uno::RuntimeException("Table too complex", 
static_cast<cppu::OWeakObject*>(this));
             rCellAny = pCell->GetAny();
             ++pCurrentCell;
         }
@@ -3764,6 +3764,8 @@ SwXCellRange::getData() throw (uno::RuntimeException, 
std::exception)
         rRow = uno::Sequence<double>(nColCount);
         for(auto& rValue : rRow)
         {
+            if (!(*pCurrentCell).is())
+                throw uno::RuntimeException("Table too complex", 
static_cast<cppu::OWeakObject*>(this));
             rValue = (*pCurrentCell)->getValue();
             ++pCurrentCell;
         }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to