About tdf#121074
Julien Nabet
serval2412 at yahoo.fr
Mon Nov 5 19:46:24 UTC 2018
Hello,
Trying to investigate about tdf#121074, I've retrieved a bt + some
console logs which include this kind of line:
warn:legacy.osl:3913:3913:sc/source/filter/oox/worksheethelper.cxx:533:
WorksheetGlobals::getDrawPageSize - called too early, size invalid
->
531 const awt::Size& WorksheetGlobals::getDrawPageSize() const
532 {
533 OSL_ENSURE( (maDrawPageSize.Width > 0) &&
(maDrawPageSize.Height > 0), "WorksheetGlobals::getDrawPageSize - called
too early, size invalid" );
534 return maDrawPageSize;
535 }
To understand the pb, I put some asserts (since I use enable-dbgutil) in
setWidth and setHeight methods:
diff --git a/include/tools/gen.hxx b/include/tools/gen.hxx
index 5d6ff5ea66b8..2ce006bde31e 100644
--- a/include/tools/gen.hxx
+++ b/include/tools/gen.hxx
@@ -21,6 +21,7 @@
#include <tools/toolsdllapi.h>
+#include <cassert>
#include <limits.h>
#include <algorithm>
#include <ostream>
@@ -194,8 +195,16 @@ public:
long getWidth() const { return Width(); }
long getHeight() const { return Height(); }
- void setWidth(long nWidth) { nA = nWidth; }
- void setHeight(long nHeight) { nB = nHeight; }
+ void setWidth(long nWidth)
+ {
+ assert((nWidth >= 0 || nWidth == -1) && "Wrong value for width");
+ nA = nWidth;
+ }
+ void setHeight(long nHeight)
+ {
+ assert((nHeight >= 0 || nHeight == -1) && "Wrong value for
height");
+ nB = nHeight;
+ }
Pair const & toPair() const { return *this; }
Pair & toPair() { return *this; }
Result was quite long to obtain since it supposes to rebuild big chunks
of LO but finally got this:
Testing
file:///home/julien/lo/libreoffice/vcl/qa/cppunit/graphicfilter/data/svm/fail/mapmode-1.svm:
cppunittester: /home/julien/lo/libreoffice/include/tools/gen.hxx:200:
void Size::setWidth(long int): Assertion `(nWidth >= 0 || nWidth == -1)
&& "Wrong value for width"' failed
(gdb) frame 5
#5 0x00007ffff0d75c30 in SVMConverter::ImplConvertFromSVM1 (rIStm=...,
rMtf=...) at /home/julien/lo/libreoffice/vcl/source/gdi/svmconverter.cxx:264
264 aPrefSz.setWidth( nTmp32 ); //
PrefSize.Width()
(gdb) p nTmp32
$1 = -16682258
Looking at git history from
vcl/qa/cppunit/graphicfilter/data/svm/fail/mapmode-1.svm, I got
d776eeab752fd313226a7570c3ed4d8e964b4406
"ofz#937 sanity check claimed record length"
1) Do you think these asserts are ok?
2) If yes, any thoughts how to fix this specific test with the svm
(hoping there won't be more but I'm a bit pessimistic about this)?
Should we add some tests on nTmp32 before calling setWidth and setHeight
in vcl/source/gdi/svmconverter.cxx#264 ?
Julien
-------------- next part --------------
Testing file:///home/julien/lo/libreoffice/vcl/qa/cppunit/graphicfilter/data/svm/fail/mapmode-1.svm:
cppunittester: /home/julien/lo/libreoffice/include/tools/gen.hxx:200: void Size::setWidth(long int): Assertion `(nWidth >= 0 || nWidth == -1) && "Wrong value for width"' failed.
Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0 0x00007ffff78faf3b in __GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007ffff78fc2f1 in __GI_abort () at abort.c:79
#2 0x00007ffff78f3a8a in __assert_fail_base (fmt=0x7ffff7a47ec8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion at entry=0x7ffff13ae120 "(nWidth >= 0 || nWidth == -1) && \"Wrong value for width\"", file=file at entry=0x7ffff13ae0e8 "/home/julien/lo/libreoffice/include/tools/gen.hxx", line=line at entry=200, function=function at entry=0x7ffff13b11f0 <Size::setWidth(long)::__PRETTY_FUNCTION__> "void Size::setWidth(long int)") at assert.c:92
#3 0x00007ffff78f3b02 in __GI___assert_fail (assertion=0x7ffff13ae120 "(nWidth >= 0 || nWidth == -1) && \"Wrong value for width\"", file=0x7ffff13ae0e8 "/home/julien/lo/libreoffice/include/tools/gen.hxx", line=200, function=0x7ffff13b11f0 <Size::setWidth(long)::__PRETTY_FUNCTION__> "void Size::setWidth(long int)") at assert.c:101
#4 0x00007ffff097958d in Size::setWidth(long) (this=0x7fffffff05f0, nWidth=-16682258) at /home/julien/lo/libreoffice/include/tools/gen.hxx:200
#5 0x00007ffff0d75c30 in SVMConverter::ImplConvertFromSVM1(SvStream&, GDIMetaFile&) (rIStm=..., rMtf=...) at /home/julien/lo/libreoffice/vcl/source/gdi/svmconverter.cxx:264
#6 0x00007ffff0d75aa0 in SVMConverter::SVMConverter(SvStream&, GDIMetaFile&) (this=0x7fffffff0a08, rStm=..., rMtf=...)
at /home/julien/lo/libreoffice/vcl/source/gdi/svmconverter.cxx:229
#7 0x00007ffff0d9b949 in ReadGDIMetaFile(SvStream&, GDIMetaFile&, ImplMetaReadData*) (rIStm=..., rGDIMetaFile=..., pData=0x0)
at /home/julien/lo/libreoffice/vcl/source/gdi/gdimtf.cxx:2690
#8 0x00007ffff0dc2cb8 in ReadImpGraphic(SvStream&, ImpGraphic&) (rIStm=..., rImpGraphic=...) at /home/julien/lo/libreoffice/vcl/source/gdi/impgraph.cxx:1831
#9 0x00007ffff0db29da in ReadGraphic(SvStream&, Graphic&) (rIStream=..., rGraphic=...) at /home/julien/lo/libreoffice/vcl/source/gdi/graph.cxx:547
#10 0x00007ffff108c5d2 in GraphicFilter::ImportGraphic(Graphic&, rtl::OUString const&, SvStream&, unsigned short, unsigned short*, GraphicFilterImportFlags, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>*, WmfExternal const*) (this=0x5555562f8860, rGraphic=..., rPath="file:///home/julien/lo/libreoffice/vcl/qa/cppunit/graphicfilter/data/svm/fail/mapmode-1.svm", rIStream=..., nFormat=16, pDeterminedFormat=0x0, nImportFlags=GraphicFilterImportFlags::NONE, pFilterData=0x0, pExtHeader=0x0)
at /home/julien/lo/libreoffice/vcl/source/filter/graphicfilter.cxx:1923
#11 0x00007ffff1089605 in GraphicFilter::ImportGraphic(Graphic&, rtl::OUString const&, SvStream&, unsigned short, unsigned short*, GraphicFilterImportFlags, WmfExternal const*) (this=0x5555562f8860, rGraphic=..., rPath="file:///home/julien/lo/libreoffice/vcl/qa/cppunit/graphicfilter/data/svm/fail/mapmode-1.svm", rIStream=..., nFormat=65535, pDeterminedFormat=0x0, nImportFlags=GraphicFilterImportFlags::NONE, pExtHeader=0x0) at /home/julien/lo/libreoffice/vcl/source/filter/graphicfilter.cxx:1281
#12 0x00007ffff0291b3b in VclFiltersTest::load(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int) (this=0x5555562f8750, rURL="file:///home/julien/lo/libreoffice/vcl/qa/cppunit/graphicfilter/data/svm/fail/mapmode-1.svm")
at /home/julien/lo/libreoffice/vcl/qa/cppunit/graphicfilter/filters-test.cxx:62
#13 0x00007fffeb19e722 in test::FiltersTest::recursiveScan(test::filterStatus, rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int, bool) (this=0x5555562f8750, nExpected=test::fail, rFilter="", rURL="file:///home/julien/lo/libreoffice//vcl/qa/cppunit/graphicfilter/data/svm/fail", rUserData="", nFilterFlags=SfxFilterFlags::IMPORT, nClipboardID=SotClipboardFormatId::NONE, nFilterVersion=0, bExport=false)
at /home/julien/lo/libreoffice/unotest/source/cpp/filters-test.cxx:130
#14 0x00007fffeb19efa6 in test::FiltersTest::testDir(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int, bool) (this=0x5555562f8750, rFilter="", rURL="file:///home/julien/lo/libreoffice//vcl/qa/cppunit/graphicfilter/data/svm/", rUserData="", nFilterFlags=SfxFilterFlags::IMPORT, nClipboardID=SotClipboardFormatId::NONE, nFilterVersion=0, bExport=false) at /home/julien/lo/libreoffice/unotest/source/cpp/filters-test.cxx:158
#15 0x00007ffff02932e7 in VclFiltersTest::testCVEs() (this=0x5555562f8750) at /home/julien/lo/libreoffice/vcl/qa/cppunit/graphicfilter/filters-test.cxx:173
#16 0x00007ffff02983a6 in std::__invoke_impl<void, void (VclFiltersTest::*&)(), VclFiltersTest*&>(std::__invoke_memfun_deref, void (VclFiltersTest::*&)(), VclFiltersTest*&) (__f=@0x5555562f9b40: (void (VclFiltersTest::*)(VclFiltersTest * const)) 0x7ffff0292d30 <VclFiltersTest::testCVEs()>, __t=@0x5555562f9b50: 0x5555562f8750)
at /usr/include/c++/8/bits/invoke.h:73
#17 0x00007ffff0298229 in std::__invoke<void (VclFiltersTest::*&)(), VclFiltersTest*&>(void (VclFiltersTest::*&)(), VclFiltersTest*&) (__fn=@0x5555562f9b40: (void (VclFiltersTest::*)(VclFiltersTest * const)) 0x7ffff0292d30 <VclFiltersTest::testCVEs()>, __args#0=@0x5555562f9b50: 0x5555562f8750) at /usr/include/c++/8/bits/invoke.h:95
#18 0x00007ffff0297db3 in std::_Bind<void (VclFiltersTest::*(VclFiltersTest*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (this=0x5555562f9b40, __args=...) at /usr/include/c++/8/functional:400
#19 0x00007ffff0297631 in std::_Bind<void (VclFiltersTest::*(VclFiltersTest*))()>::operator()<, void>() (this=0x5555562f9b40) at /usr/include/c++/8/functional:484
#20 0x00007ffff0296e5d in std::_Function_handler<void (), std::_Bind<void (VclFiltersTest::*(VclFiltersTest*))()> >::_M_invoke(std::_Any_data const&) (__functor=...)
at /usr/include/c++/8/bits/std_function.h:297
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) frame 5
#5 0x00007ffff0d75c30 in SVMConverter::ImplConvertFromSVM1 (rIStm=..., rMtf=...) at /home/julien/lo/libreoffice/vcl/source/gdi/svmconverter.cxx:264
264 aPrefSz.setWidth( nTmp32 ); // PrefSize.Width()
(gdb) p nTmp32
$1 = -16682258
(gdb) list
259 rIStm.ReadInt16( nSize ); // Size
260 sal_Int16 nVersion(0);
261 rIStm.ReadInt16( nVersion ); // Version
262 sal_Int32 nTmp32(0);
263 rIStm.ReadInt32( nTmp32 );
264 aPrefSz.setWidth( nTmp32 ); // PrefSize.Width()
265 rIStm.ReadInt32( nTmp32 );
266 aPrefSz.setHeight( nTmp32 ); // PrefSize.Height()
267
268 // check header-magic and version
(gdb) p nVersion
$2 = 200
(gdb) p nSize
$3 = 2884
More information about the LibreOffice
mailing list