Kaydet (Commit) 102de4aa authored tarafından Caolán McNamara's avatar Caolán McNamara Kaydeden (comit) Andras Timar

Resolves: more crash on export of ooo47778-3.sxw to docx

This is more of the horror where the table in the frame has its cells out of
visual sequence, extend the previous fix of this kind to accept cells within
the original unmodified selected range

Change-Id: I6e8220f712fe9de5d4b98fb3cb5ed67e3762e929
(cherry picked from commit 60f8dd78)
üst 390b22cb
...@@ -813,12 +813,18 @@ DECLARE_OOXMLEXPORT_TEST(testSectionHeader, "sectionprot.odt") ...@@ -813,12 +813,18 @@ DECLARE_OOXMLEXPORT_TEST(testSectionHeader, "sectionprot.odt")
} }
} }
DECLARE_OOXMLEXPORT_TEST(testOO47778, "ooo47778-3.odt") DECLARE_OOXMLEXPORT_TEST(testOO47778_1, "ooo47778-3.odt")
{ {
if (xmlDocPtr pXmlDoc = parseExport("word/document.xml")) if (xmlDocPtr pXmlDoc = parseExport("word/document.xml"))
assertXPathContent(pXmlDoc, "(//w:t)[3]", "c"); assertXPathContent(pXmlDoc, "(//w:t)[3]", "c");
} }
DECLARE_OOXMLEXPORT_TEST(testOO47778_2, "ooo47778-4.odt")
{
if (xmlDocPtr pXmlDoc = parseExport("word/document.xml"))
assertXPathContent(pXmlDoc, "(//w:t)[4]", "c");
}
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -1720,6 +1720,8 @@ void MSWordExportBase::WriteSpecialText( sal_uLong nStart, sal_uLong nEnd, sal_u ...@@ -1720,6 +1720,8 @@ void MSWordExportBase::WriteSpecialText( sal_uLong nStart, sal_uLong nEnd, sal_u
sal_uInt8 nOldTyp = m_nTextTyp; sal_uInt8 nOldTyp = m_nTextTyp;
m_nTextTyp = nTTyp; m_nTextTyp = nTTyp;
SwPaM* pOldPam = m_pCurPam; //!! Simply shifting the PaM without restoring should do the job too SwPaM* pOldPam = m_pCurPam; //!! Simply shifting the PaM without restoring should do the job too
sal_uLong nOldStart = m_nCurStart;
sal_uLong nOldEnd = m_nCurEnd;
SwPaM* pOldEnd = m_pOrigPam; SwPaM* pOldEnd = m_pOrigPam;
bool bOldPageDescs = m_bOutPageDescs; bool bOldPageDescs = m_bOutPageDescs;
m_bOutPageDescs = false; m_bOutPageDescs = false;
...@@ -1731,6 +1733,8 @@ void MSWordExportBase::WriteSpecialText( sal_uLong nStart, sal_uLong nEnd, sal_u ...@@ -1731,6 +1733,8 @@ void MSWordExportBase::WriteSpecialText( sal_uLong nStart, sal_uLong nEnd, sal_u
m_bOutPageDescs = bOldPageDescs; m_bOutPageDescs = bOldPageDescs;
delete m_pCurPam; // delete Pam delete m_pCurPam; // delete Pam
m_pCurPam = pOldPam; m_pCurPam = pOldPam;
m_nCurStart = nOldStart;
m_nCurEnd = nOldEnd;
m_pOrigPam = pOldEnd; m_pOrigPam = pOldEnd;
m_nTextTyp = nOldTyp; m_nTextTyp = nOldTyp;
} }
...@@ -1791,6 +1795,8 @@ void WW8Export::WriteChar( sal_Unicode c ) ...@@ -1791,6 +1795,8 @@ void WW8Export::WriteChar( sal_Unicode c )
void MSWordExportBase::SetCurPam(sal_uLong nStt, sal_uLong nEnd) void MSWordExportBase::SetCurPam(sal_uLong nStt, sal_uLong nEnd)
{ {
m_nCurStart = nStt;
m_nCurEnd = nEnd;
m_pCurPam = Writer::NewSwPaM( *m_pDoc, nStt, nEnd ); m_pCurPam = Writer::NewSwPaM( *m_pDoc, nStt, nEnd );
// Recognize tables in special cases // Recognize tables in special cases
...@@ -1842,6 +1848,8 @@ void MSWordExportBase::RestoreData() ...@@ -1842,6 +1848,8 @@ void MSWordExportBase::RestoreData()
delete m_pCurPam; delete m_pCurPam;
m_pCurPam = rData.pOldPam; m_pCurPam = rData.pOldPam;
m_nCurStart = rData.nOldStart;
m_nCurEnd = rData.nOldEnd;
m_pOrigPam = rData.pOldEnd; m_pOrigPam = rData.pOldEnd;
m_bOutTable = rData.bOldOutTable; m_bOutTable = rData.bOldOutTable;
...@@ -2530,11 +2538,12 @@ class TrackContentToExport ...@@ -2530,11 +2538,12 @@ class TrackContentToExport
{ {
private: private:
SwPaM *m_pCurPam; SwPaM *m_pCurPam;
SwPaM m_aOrigPam; sal_uLong m_nStart, m_nEnd;
public: public:
TrackContentToExport(SwPaM *pCurPam) TrackContentToExport(SwPaM *pCurPam, sal_uLong nCurStart, sal_uLong nCurEnd)
: m_pCurPam(pCurPam) : m_pCurPam(pCurPam)
, m_aOrigPam(*pCurPam, NULL) , m_nStart(nCurStart)
, m_nEnd(nCurEnd)
{ {
} }
...@@ -2559,8 +2568,8 @@ public: ...@@ -2559,8 +2568,8 @@ public:
if (pNextNode && pCurrentNode != pNextNode) if (pNextNode && pCurrentNode != pNextNode)
{ {
return pNextNode->GetIndex() >= m_aOrigPam.GetPoint()->nNode.GetIndex() && return pNextNode->GetIndex() >= m_nStart &&
pNextNode->GetIndex() < m_aOrigPam.GetMark()->nNode.GetIndex(); pNextNode->GetIndex() < m_nEnd;
} }
return false; return false;
...@@ -2569,7 +2578,7 @@ public: ...@@ -2569,7 +2578,7 @@ public:
void MSWordExportBase::WriteText() void MSWordExportBase::WriteText()
{ {
TrackContentToExport aContentTracking(m_pCurPam); TrackContentToExport aContentTracking(m_pCurPam, m_nCurStart, m_nCurEnd);
while (aContentTracking.contentRemainsToExport(m_pTableInfo.get())) while (aContentTracking.contentRemainsToExport(m_pTableInfo.get()))
{ {
SwNode& rNd = m_pCurPam->GetNode(); SwNode& rNd = m_pCurPam->GetNode();
...@@ -3558,6 +3567,8 @@ MSWordExportBase::MSWordExportBase( SwDoc *pDocument, SwPaM *pCurrentPam, SwPaM ...@@ -3558,6 +3567,8 @@ MSWordExportBase::MSWordExportBase( SwDoc *pDocument, SwPaM *pCurrentPam, SwPaM
, m_bOutOutlineOnly(false) , m_bOutOutlineOnly(false)
, m_bFontSizeWritten(false) , m_bFontSizeWritten(false)
, m_pDoc(pDocument) , m_pDoc(pDocument)
, m_nCurStart(pCurrentPam->GetPoint()->nNode.GetIndex())
, m_nCurEnd(pCurrentPam->GetMark()->nNode.GetIndex())
, m_pCurPam(pCurrentPam) , m_pCurPam(pCurrentPam)
, m_pOrigPam(pOriginalPam) , m_pOrigPam(pOriginalPam)
{ {
......
...@@ -437,6 +437,7 @@ struct MSWordSaveData ...@@ -437,6 +437,7 @@ struct MSWordSaveData
RndStdIds eOldAnchorType; RndStdIds eOldAnchorType;
ww::bytes* pOOld; ///< WW8Export only ww::bytes* pOOld; ///< WW8Export only
SwPaM* pOldPam, *pOldEnd; SwPaM* pOldPam, *pOldEnd;
sal_uLong nOldStart, nOldEnd;
const sw::Frame* pOldFlyFormat; const sw::Frame* pOldFlyFormat;
const SwPageDesc* pOldPageDesc; const SwPageDesc* pOldPageDesc;
...@@ -554,6 +555,7 @@ public: ...@@ -554,6 +555,7 @@ public:
bool m_bFontSizeWritten; bool m_bFontSizeWritten;
SwDoc *m_pDoc; SwDoc *m_pDoc;
sal_uLong m_nCurStart, m_nCurEnd;
SwPaM *m_pCurPam, *m_pOrigPam; SwPaM *m_pCurPam, *m_pOrigPam;
/// Stack to remember the nesting (see MSWordSaveData for more) /// Stack to remember the nesting (see MSWordSaveData for more)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment