[PATCH]: Fix for rtfexport subsequenttest
LeMoyne Castle
lemoyne.castle at gmail.com
Fri Dec 21 10:23:02 PST 2012
Hi,
The rtfexport subsequent test was failing with a segfault for me.
I used EXPORT DEBUGCPPUNIT=TRUE
and got the following stack trace:
Program received signal SIGSEGV, Segmentation fault.
0x478bb2d7 in RtfAttributeOutput::WriteHex(unsigned char const*, unsigned
long, SvStream*, unsigned long) () from /home/jlcastle/LibOdev/libo/solver/
unxlngi6.pro/lib/libmswordlo.so
#0 0x478bb2d7 in RtfAttributeOutput::WriteHex(unsigned char const*,
unsigned long, SvStream*, unsigned long) () from
/home/jlcastle/LibOdev/libo/solver/unxlngi6.pro/lib/libmswordlo.so
#1 0x478bb7ee in ExportPICT(SwFlyFrmFmt const*, Size const&, Size const&,
Size const&, SwCropGrf const&, char const*, unsigned char const*, unsigned
long, RtfExport const&, SvStream*) () from
/home/jlcastle/LibOdev/libo/solver/unxlngi6.pro/lib/libmswordlo.so
#2 0x478bc01b in RtfAttributeOutput::FlyFrameOLEReplacement(SwFlyFrmFmt
const*, SwOLENode&, Size const&) () from /home/jlcastle/LibOdev/libo/solver/
unxlngi6.pro/lib/libmswordlo.so
#3 0x478bc2d9 in RtfAttributeOutput::FlyFrameOLEMath(SwFlyFrmFmt const*,
SwOLENode&, Size const&) () from /home/jlcastle/LibOdev/libo/solver/
unxlngi6.pro/lib/libmswordlo.so
#4 0x478bc3f9 in RtfAttributeOutput::FlyFrameOLE(SwFlyFrmFmt const*,
SwOLENode&, Size const&) () from /home/jlcastle/LibOdev/libo/solver/
unxlngi6.pro/lib/libmswordlo.so
#5 0x478c0fa8 in RtfAttributeOutput::OutputFlyFrame_Impl(sw::Frame const&,
Point const&) () from /home/jlcastle/LibOdev/libo/solver/
unxlngi6.pro/lib/libmswordlo.so
#6 0x4790bd0c in AttributeOutputBase::TextFlyContent(SwFmtFlyCnt const&)
() from /home/jlcastle/LibOdev/libo/solver/unxlngi6.pro/lib/libmswordlo.so
#7 0x479105d7 in AttributeOutputBase::OutputItem(SfxPoolItem const&) ()
from /home/jlcastle/LibOdev/libo/solver/unxlngi6.pro/lib/libmswordlo.so
#8 0x479117a9 in MSWordExportBase::ExportPoolItemsToCHP(std::map<unsigned
short, SfxPoolItem const*, sw::util::ItemSort,
std::allocator<std::pair<unsigned short const, SfxPoolItem const*> > >&,
unsigned short) () from /home/jlcastle/LibOdev/libo/solver/
unxlngi6.pro/lib/libmswordlo.so
#9 0x478e7c7e in SwWW8AttrIter::OutAttr(unsigned short, bool) () from
/home/jlcastle/LibOdev/libo/solver/unxlngi6.pro/lib/libmswordlo.so
#10 0x478e9d03 in MSWordExportBase::OutputTextNode(SwTxtNode const&) ()
from /home/jlcastle/LibOdev/libo/solver/unxlngi6.pro/lib/libmswordlo.so
#11 0x478c5c6e in RtfExport::OutputTextNode(SwTxtNode const&) () from
/home/jlcastle/LibOdev/libo/solver/unxlngi6.pro/lib/libmswordlo.so
I poked around looking at buffers and sizes and made this correction before
a call that matches #1:
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx
b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 36d1cea..9a65c42 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -3347,7 +3347,7 @@ void RtfAttributeOutput::FlyFrameOLEReplacement(const
SwFlyFrmFmt* pFlyFrmFmt, S
<< edited and inserted more code here for full context...
const sal_uInt8* pGraphicAry = 0;
SvMemoryStream aStream;
if (GraphicConverter::Export(aStream, *pGraphic, CVT_PNG) !=
ERRCODE_NONE)
OSL_FAIL("failed to export the graphic");
aStream.Seek(STREAM_SEEK_TO_END);
sal_uInt32 nSize = aStream.Tell();
pGraphicAry = (sal_uInt8*)aStream.GetData();
m_aRunText->append(ExportPICT( pFlyFrmFmt, aSize, aRendered, aMapped,
rCr, pBLIPType, pGraphicAry, nSize, m_rExport ));
m_aRunText->append("}"); // shppict
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_NONSHPPICT);
pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE;
SvMemoryStream aWmfStream;
if (GraphicConverter::Export(aWmfStream, *pGraphic, CVT_WMF) !=
ERRCODE_NONE)
OSL_FAIL("failed to export the graphic");
aWmfStream.Seek(STREAM_SEEK_TO_END);
nSize = aWmfStream.Tell();
- pGraphicAry = (sal_uInt8*)aStream.GetData();
+ pGraphicAry = (sal_uInt8*)aWmfStream.GetData();
m_aRunText->append(ExportPICT( pFlyFrmFmt, aSize, aRendered, aMapped,
rCr, pBLIPType, pGraphicAry, nSize, m_rExport ));
m_aRunText->append("}"); // nonshppict
}
Basically, fix a typo. rtfexport test now passes instead of crashes.
I got myself sideways with gerrit or I would have submitted this there.
Submitting patch here so that no one else has to be stuck with the broken
subsequent test.
One question I have is:
Should I open a new bug for the rtfexport subsequent test failure?
I will certainly open one if it comes back for me, but should I open one
for this patch?
Plugging back in,
LeMoyne
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20121221/d8808dfb/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-for-rtfexport-subsequenttest.patch
Type: application/octet-stream
Size: 1250 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20121221/d8808dfb/attachment.obj>
More information about the LibreOffice
mailing list