diff options
author | Miklos Vajna <vmiklos@frugalware.org> | 2011-11-13 02:17:33 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@frugalware.org> | 2011-11-13 04:14:19 +0100 |
commit | 3f170f223296e2d0d336ff69088e5ba57b3a37c9 (patch) | |
tree | 80e8ee5174bccbd5518d5004ee42f99f27cf0c81 /writerfilter | |
parent | 3510a6f63913544e8a686fcf152b31b4841d94fc (diff) |
Related: i#110745 fix crash on invalid RTF tables
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 8 |
2 files changed, 10 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 2f3eed636a52..61add03fe90d 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -348,6 +348,8 @@ void DomainMapper_Impl::PushListProperties(PropertyMapPtr pListProperties) void DomainMapper_Impl::PopProperties(ContextType eId) { OSL_ENSURE(!m_aPropertyStacks[eId].empty(), "section stack already empty"); + if ( m_aPropertyStacks[eId].empty() ) + return; if ( eId == CONTEXT_SECTION ) { diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 650f4806461c..d88c199e5e8d 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1668,6 +1668,9 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword) m_aStates.top().aTableRowSprms = m_aDefaultState.aTableRowSprms; m_aStates.top().aTableRowAttributes = m_aDefaultState.aTableRowAttributes; m_aStates.top().nCellX = 0; + // In case the table definition is in the middle of the row + // (invalid), make sure table definition is emitted. + m_bNeedPap = true; break; case RTF_WIDCTLPAR: case RTF_NOWIDCTLPAR: @@ -1954,6 +1957,9 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) if (nSprm > 0) { m_aStates.top().aParagraphSprms->push_back(make_pair(nSprm, pIntValue)); + if (nKeyword == RTF_ITAP && nParam > 0) + // Invalid tables may omit INTBL after ITAP + dispatchFlag(RTF_INTBL); return 0; } @@ -2286,6 +2292,8 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) m_aStates.top().aTableCellsAttributes.push_back(m_aStates.top().aTableCellAttributes); m_aStates.top().aTableCellSprms = m_aDefaultState.aTableCellSprms; m_aStates.top().aTableCellAttributes = m_aDefaultState.aTableCellAttributes; + // We assume text after a row definition always belongs to the table, to handle text before the real INTBL token + dispatchFlag(RTF_INTBL); } break; case RTF_TRRH: |