sw/qa/extras/ooxmlexport/data/testFootnote.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 10 ++++++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 6 ++++-- sw/source/filter/ww8/docxattributeoutput.hxx | 2 ++ 4 files changed, 16 insertions(+), 2 deletions(-)
New commits: commit 5cdd6d28d10d815c046b65db48847558259a1d1a Author: Pallavi Jadhav <pallavi.jad...@synerzip.com> Date: Fri Nov 8 18:48:58 2013 +0530 LibreOffice Corrupts DOCX files containing Footnotes after Roundtrip Issue : 1] Extra data was getting written into document.xml after </w:document> This includes : 1) <sectPr> tag 2) Paragraph tag of <w:footnote w:id="2"> from footnotes.xml 2] This is leading to document corruption Implementation : 1] Enabled a flag inside DocxAttributeOutput::FootnotesEndnotes 2] Check value of flag to decide whehter to write section properties or not Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx sw/source/filter/ww8/docxattributeoutput.cxx Reviewed on: https://gerrit.libreoffice.org/6644 Change-Id: Iae53fd6bf12bcbac84846bd36823bc08f21f9edf diff --git a/sw/qa/extras/ooxmlexport/data/testFootnote.docx b/sw/qa/extras/ooxmlexport/data/testFootnote.docx new file mode 100644 index 0000000..5bba6d8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/testFootnote.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index d182180..7c5738f 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -1878,6 +1878,16 @@ DECLARE_OOXML_TEST(testPNGImageCrop, "test_PNG_ImageCrop.docx") CPPUNIT_ASSERT_EQUAL( sal_Int32( 737 ), aGraphicCropStruct.Bottom ); } +DECLARE_OOXML_TEST(testFootnoteParagraphTag, "testFootnote.docx") +{ + /* In footnotes.xml, the paragraph tag inside <w:footnote w:id="2"> was getting written into document.xml. + * Check for, paragraph tag is correctly written into footnotes.xml. + */ + xmlDocPtr pXmlFootnotes = parseExport("word/footnotes.xml"); + assertXPath(pXmlFootnotes, "/w:footnotes/w:footnote[3]","id","2"); + assertXPath(pXmlFootnotes, "/w:footnotes/w:footnote[3]/w:p/w:r/w:rPr/w:rStyle","val","Footnotereference"); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 80c17e3..054e946 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -501,7 +501,7 @@ void DocxAttributeOutput::StartParagraphProperties() m_pSerializer->startElementNS( XML_w, XML_pPr, FSEND ); // and output the section break now (if it appeared) - if ( m_pSectionInfo ) + if ( m_pSectionInfo && (!m_setFootnote)) { m_rExport.SectionProperties( *m_pSectionInfo ); m_pSectionInfo.reset(); @@ -5120,6 +5120,7 @@ void DocxAttributeOutput::FootnoteEndnoteReference() void DocxAttributeOutput::FootnotesEndnotes( bool bFootnotes ) { + m_setFootnote = true; const FootnotesVector& rVector = bFootnotes? m_pFootnotesList->getVector(): m_pEndnotesList->getVector(); sal_Int32 nBody = bFootnotes? XML_footnotes: XML_endnotes; @@ -6272,7 +6273,8 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri m_bParaBeforeAutoSpacing(false), m_bParaAfterAutoSpacing(false), m_iParaBeforeSpacing(0), - m_iParaAfterSpacing(0) + m_iParaAfterSpacing(0), + m_setFootnote(false) { } diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 14b22b2..2099116 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -784,6 +784,8 @@ private: // store hardcoded value which was set during import. sal_Int32 m_iParaBeforeSpacing,m_iParaAfterSpacing; + bool m_setFootnote; + public: DocxAttributeOutput( DocxExport &rExport, ::sax_fastparser::FSHelperPtr pSerializer, oox::drawingml::DrawingML* pDrawingML ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits