diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-10-11 12:20:07 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-10-11 12:21:38 +0100 |
commit | 60a93729c95d31edab50a905236faa9e38a81556 (patch) | |
tree | e30072d9b28075905e53fbc4a2caf090743974bb /sw/source/filter/ww8/docxattributeoutput.cxx | |
parent | d8628e87e989668ade0045cfd219912c1579b27b (diff) |
Resolves: fdo#48569 crash on export to .docx of inline anchored frame
we're currently deferring to the end of the text node to export
the contents of frames. If its anchored as character then the
sw::Frame (which is allocated on stack) has gone out of scope
so this pointer points to junk. Copy it instead.
Sill need to export frames property at some stage.
Change-Id: Ib9f8c6857ce1afe6acba84986b692139e44a7aad
Diffstat (limited to 'sw/source/filter/ww8/docxattributeoutput.cxx')
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 05a82bfddb24..1fc43871c9a0 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -265,7 +265,10 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT // Write the anchored frame if any if ( m_pParentFrame ) { - const SwFrmFmt& rFrmFmt = m_pParentFrame->GetFrmFmt( ); + sw::Frame *pParentFrame = m_pParentFrame; + m_pParentFrame = NULL; + + const SwFrmFmt& rFrmFmt = pParentFrame->GetFrmFmt( ); const SwNodeIndex* pNodeIndex = rFrmFmt.GetCntnt().GetCntntIdx(); sal_uLong nStt = pNodeIndex ? pNodeIndex->GetIndex()+1 : 0; @@ -273,12 +276,13 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT m_rExport.SaveData( nStt, nEnd ); - m_rExport.mpParentFrame = m_pParentFrame; - m_pParentFrame = NULL; + m_rExport.mpParentFrame = pParentFrame; m_rExport.WriteText( ); m_rExport.RestoreData(); + + delete pParentFrame; } } @@ -2430,8 +2434,8 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const sw::Frame &rFrame, const Po break; case sw::Frame::eTxtBox: { - // The frame output is postponed at the end of the anchor paragraph - m_pParentFrame = &rFrame; + // The frame output is postponed to the end of the anchor paragraph + m_pParentFrame = new sw::Frame(rFrame); } break; case sw::Frame::eOle: @@ -4598,7 +4602,7 @@ DocxAttributeOutput::~DocxAttributeOutput() delete m_pEndnotesList, m_pEndnotesList = NULL; delete m_pTableWrt, m_pTableWrt = NULL; - m_pParentFrame = NULL; + delete m_pParentFrame; } DocxExport& DocxAttributeOutput::GetExport() |