From ba4b62e10924f43136c8ce048ce8504b44c5ec61 Mon Sep 17 00:00:00 2001 From: Rohit Deshmukh Date: Thu, 8 May 2014 16:33:44 +0530 Subject: fdo#78384: Fix for corruption if file contains symbols. * In case of symbol, symbol character get imported first and then font of symbols. * So we are storing symbol character and when we parse symbol font then create UNO object for text. Reviewed-on: https://gerrit.libreoffice.org/9281 Reviewed-by: Miklos Vajna Tested-by: Miklos Vajna (cherry picked from commit f51640c5f40d5132b396a9fb6589420383df1610) Signed-off-by: Andras Timar Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx writerfilter/source/dmapper/DomainMapper_Impl.cxx Change-Id: If5b79521c6a59aec02b165e8120dafdd472cdaeb --- writerfilter/source/dmapper/DomainMapper.cxx | 11 ++++++++++- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 11 +++++++++++ writerfilter/source/dmapper/DomainMapper_Impl.hxx | 4 ++++ 3 files changed, 25 insertions(+), 1 deletion(-) (limited to 'writerfilter/source') diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index c7625e35033b..4a520c88ad00 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -893,7 +893,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) } else //it's a _real_ symbol { - utext( reinterpret_cast < const sal_uInt8 * >( &nIntValue ), 1 ); + m_pImpl->SetSymbolData(nIntValue); } break; case NS_rtf::LN_CHAR: //footnote symbol character @@ -911,7 +911,16 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) } else //a real symbol if (m_pImpl->GetTopContext()) + { m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, uno::makeAny( sStringValue )); + /* + * In case of symbol, symbol character get imported first and then font of symbols. + * So we are storing symbol character and when we parse symbol font then create UNO object for text. + */ + sal_Int32 symboldata = m_pImpl->GetSymbolData(); + utext( reinterpret_cast < const sal_uInt8 * >( &(symboldata) ), 1 ); + } + break; case NS_ooxml::LN_CT_Underline_val: handleUnderlineType(nIntValue, m_pImpl->GetTopContext()); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 65916731df98..92748f102d87 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -152,6 +152,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_bIsFirstSection( true ), m_bIsColumnBreakDeferred( false ), m_bIsPageBreakDeferred( false ), + m_nSymboldata(-1), m_pLastSectionContext( ), m_pLastCharacterContext(), m_nCurrentTabStopIndex( 0 ), @@ -324,6 +325,16 @@ void DomainMapper_Impl::RemoveLastParagraph( ) } } +void DomainMapper_Impl::SetSymbolData( bool nSymbolData ) +{ + m_nSymboldata = nSymbolData; +} + +sal_Int32 DomainMapper_Impl::GetSymbolData() +{ + return m_nSymboldata; +} + void DomainMapper_Impl::SetIsLastParagraphInSection( bool bIsLast ) { m_bIsLastParaInSection = bIsLast; diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 6792be2104ca..c8859a20065a 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -336,6 +336,7 @@ private: BookmarkMap_t m_aBookmarkMap; _PageMar m_aPageMargins; + sal_Int32 m_nSymboldata; // TableManagers are stacked: one for each stream to avoid any confusion @@ -459,6 +460,9 @@ public: bool GetIsFirstParagraphInSection(); void SetParaSectpr(bool bParaSectpr); bool GetParaSectpr(); + + void SetSymbolData( bool nSymbolData ); + sal_Int32 GetSymbolData(); /// Setter method for m_bSdt. void SetSdt(bool bSdt); /// Getter method for m_bSdt. -- cgit