diff options
author | Caolán McNamara <caolanm@redhat.com> | 2014-09-28 16:47:13 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2014-10-03 10:31:35 +0200 |
commit | 142527fff381c3269ca05e99b9fb8a6fb7ab1b6c (patch) | |
tree | 3130d07ee03b3bdc0d7ce47b9cb4c27689c94248 /writerfilter | |
parent | 0e9d68707f0e76054375334fc28b6abacad77cb3 (diff) |
Related: fdo#73608 don't crash on missing table styles
(cherry picked from commit 5fd7382651d64f77e8ad1d9a5c053f52f3641f9f)
Conflicts:
writerfilter/source/dmapper/DomainMapperTableHandler.cxx
Change-Id: I340b43b7afc4c5c4d6dc8e4ed182279240306540
Resolves: fdo#73608 bail out on loop in style sheet hierarchy
Change-Id: I03975d1ce8eaceceb4d5c263eb11c1521bcd57eb
(cherry picked from commit be18133e84120625734a09380594ee89b23c4322)
Reviewed-on: https://gerrit.libreoffice.org/11680
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Tested-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapperTableHandler.cxx | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index 7b8d9cd9a42d..b4002d7fd795 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -116,9 +116,17 @@ void DomainMapperTableHandler::startTable(unsigned int nRows, PropertyMapPtr lcl_SearchParentStyleSheetAndMergeProperties(const StyleSheetEntryPtr pStyleSheet, StyleSheetTablePtr pStyleSheetTable) { PropertyMapPtr pRet; + + if (!pStyleSheet) + return pRet; + if(!pStyleSheet->sBaseStyleIdentifier.isEmpty()) { const StyleSheetEntryPtr pParentStyleSheet = pStyleSheetTable->FindStyleSheetByISTD( pStyleSheet->sBaseStyleIdentifier ); + //a loop in the style hierarchy, bail out + if (pParentStyleSheet == pStyleSheet) + return pRet; + pRet = lcl_SearchParentStyleSheetAndMergeProperties( pParentStyleSheet, pStyleSheetTable ); } else @@ -126,7 +134,10 @@ PropertyMapPtr lcl_SearchParentStyleSheetAndMergeProperties(const StyleSheetEntr pRet.reset( new PropertyMap ); } - pRet->InsertProps(pStyleSheet->pProperties); + if (pRet) + { + pRet->InsertProps(pStyleSheet->pProperties); + } return pRet; } @@ -291,6 +302,9 @@ namespace bool lcl_extractTableBorderProperty(PropertyMapPtr pTableProperties, const PropertyIds nId, TableInfo& rInfo, table::BorderLine2& rLine) { + if (!pTableProperties) + return false; + PropertyMap::iterator aTblBorderIter = pTableProperties->find(nId); if( aTblBorderIter != pTableProperties->end() ) { |