summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorRohit Deshmukh <rohit.deshmukh@synerzip.com>2014-05-08 16:33:44 +0530
committerAndras Timar <andras.timar@collabora.com>2014-05-14 15:03:50 +0200
commitba4b62e10924f43136c8ce048ce8504b44c5ec61 (patch)
tree02c6bfaa305ead042b46b441b570510e56ec12fe /writerfilter
parentd9c0280d4b785d07c220bfd029c2949227b8f398 (diff)
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 <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk> (cherry picked from commit f51640c5f40d5132b396a9fb6589420383df1610) Signed-off-by: Andras Timar <andras.timar@collabora.com> Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx writerfilter/source/dmapper/DomainMapper_Impl.cxx Change-Id: If5b79521c6a59aec02b165e8120dafdd472cdaeb
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx11
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx11
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx4
3 files changed, 25 insertions, 1 deletions
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.