sw/qa/extras/ooxmlexport/data/test76108.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx     |    7 +++++++
 sw/source/filter/ww8/docxattributeoutput.cxx |   15 ++++++++-------
 3 files changed, 15 insertions(+), 7 deletions(-)

New commits:
commit d44abe1724ee5470c88f5fba5c0217fb37e2205c
Author: Sourav <sourav.maha...@synerzip.com>
Date:   Sat Mar 15 12:48:18 2014 +0530

    fdo#76108 : The RT file is getting corrupted.
    
    Description:The RT file is getting corrupted.
    The <w:fldChar w:fldCharType="end" /> tag is there inside the hyperlink tag 
where as the <w:fldChar w:fldCharType="begin"> is starting before the hyperlink 
tag.This is causing the issue.
    
    The rootcause found is in DocxAttributeOutput::EndRun().
    A check is introduced before the code that writes the <w:fldChar 
w:fldCharType="end" /> after the hyperlink to check if the m_startedHyperlink 
is false.
    
    I have added test case to verify that now the RT file is opening
    I also verified this change on a set of 440 real world documents 
(containing many combinations of MS Office features) to make sure there is no 
regression because of this change.
    
    Conflicts:
        sw/qa/extras/ooxmlexport/ooxmlexport.cxx
    Reviewed on:
        https://gerrit.libreoffice.org/8603
    
    Change-Id: Ibc3ca8edcfb68d52a9394580bac1ce878eda9405

diff --git a/sw/qa/extras/ooxmlexport/data/test76108.docx 
b/sw/qa/extras/ooxmlexport/data/test76108.docx
new file mode 100644
index 0000000..3476dc5
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test76108.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index aea7db3..ed5eb96 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -2854,6 +2854,13 @@ DECLARE_OOXMLEXPORT_TEST(testContentTypeXLSM, 
"fdo76098.docx")
 
 }
 
+DECLARE_OOXMLEXPORT_TEST(test76108, "test76108.docx")
+{
+    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+    if (!pXmlDoc) return;
+    //docx file after RT is getting corrupted.
+    assertXPath(pXmlDoc, 
"/w:document[1]/w:body[1]/w:p[1]/w:r[1]/w:fldChar[1]", "fldCharType", "begin");
+}
 
 #endif
 
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index eab3f90..42ca6bd 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -827,13 +827,14 @@ void DocxAttributeOutput::EndRun()
         m_closeHyperlinkInThisRun = false;
     }
 
-    while ( m_Fields.begin() != m_Fields.end() )
-    {
-        EndField_Impl( m_Fields.front( ) );
-        if (m_Fields.front().pField)
-            delete m_Fields.front().pField;
-        m_Fields.erase( m_Fields.begin( ) );
-    }
+    if(!m_startedHyperlink)
+        while ( m_Fields.begin() != m_Fields.end() )
+        {
+            EndField_Impl( m_Fields.front( ) );
+            if (m_Fields.front().pField)
+                delete m_Fields.front().pField;
+            m_Fields.erase( m_Fields.begin( ) );
+        }
 }
 
 void DocxAttributeOutput::DoWriteBookmarks()
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to