diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2018-11-12 19:29:59 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2018-11-12 21:13:43 +0100 |
commit | a1f23b1fc4814bb857bb433570ed25c11594d583 (patch) | |
tree | 58af7e1c737bcaa4f6728abe6565a469d9be6685 | |
parent | eef0f6cd6b6317a6704ed43aff58b52c51397119 (diff) |
Silence -fsanitize=implicit-signed-integer-truncation
...as happens during CppunitTest_sw_ww8export (see below), by keeping
nTableOffset of signed type.
It is beneficial to introduce InsInt16 (internally doing the cast to sal_uInt16)
instead of casting nTableOffset to sal_uInt16 at the call site, so that
-fsanitize=implicit-signed-integer-truncation can still warn about bad
nTableOffset values outside the sal_Int16 range being passed to InsInt16.
> sw/source/filter/ww8/wrtww8.cxx:2392:34: runtime error: implicit conversion from type 'int' of value 67140 (32-bit, signed) to type 'sal_uInt16' (aka 'unsigned short') changed the value to 1604 (16-bit, unsigned)
> #0 in WW8AttributeOutput::TableDefinition(std::shared_ptr<ww8::WW8TableNodeInfoInner>) at sw/source/filter/ww8/wrtww8.cxx:2392:34 (instdir/program/libmswordlo.so +0x1f12f98)
> #1 in WW8AttributeOutput::TableInfoRow(std::shared_ptr<ww8::WW8TableNodeInfoInner>) at sw/source/filter/ww8/wrtww8.cxx:2058:13 (instdir/program/libmswordlo.so +0x1f06ccf)
> #2 in WW8AttributeOutput::EndParagraph(std::shared_ptr<ww8::WW8TableNodeInfoInner>) at sw/source/filter/ww8/ww8atr.cxx:998:13 (instdir/program/libmswordlo.so +0x208fe56)
> #3 in MSWordExportBase::OutputTextNode(SwTextNode&) at sw/source/filter/ww8/wrtw8nds.cxx:2966:22 (instdir/program/libmswordlo.so +0x1c4d259)
> #4 in MSWordExportBase::OutputContentNode(SwContentNode&) at sw/source/filter/ww8/wrtw8nds.cxx:3237:13 (instdir/program/libmswordlo.so +0x1c5a3b4)
> #5 in MSWordExportBase::WriteText() at sw/source/filter/ww8/wrtww8.cxx:2725:13 (instdir/program/libmswordlo.so +0x1efa992)
> #6 in WW8Export::WriteMainText() at sw/source/filter/ww8/wrtww8.cxx:2845:5 (instdir/program/libmswordlo.so +0x1f2101e)
> #7 in WW8Export::StoreDoc1() at sw/source/filter/ww8/wrtww8.cxx:3005:5 (instdir/program/libmswordlo.so +0x1f31acf)
> #8 in WW8Export::ExportDocument_Impl() at sw/source/filter/ww8/wrtww8.cxx:3367:5 (instdir/program/libmswordlo.so +0x1f46dd2)
> #9 in MSWordExportBase::ExportDocument(bool) at sw/source/filter/ww8/wrtww8.cxx:3206:19 (instdir/program/libmswordlo.so +0x1f3cbf2)
> #10 in SwWW8Writer::WriteStorage() at sw/source/filter/ww8/wrtww8.cxx:3545:23 (instdir/program/libmswordlo.so +0x1f50966)
> #11 in StgWriter::Write(SwPaM&, SotStorage&, rtl::OUString const*) at sw/source/filter/writer/writer.cxx:511:20 (instdir/program/libswlo.so +0xcc770c4)
> #12 in Writer::Write(SwPaM&, SvStream&, rtl::OUString const*) at sw/source/filter/writer/writer.cxx:254:23 (instdir/program/libswlo.so +0xcc6cc1f)
> #13 in Writer::Write(SwPaM&, SfxMedium&, rtl::OUString const*) at sw/source/filter/writer/writer.cxx:289:12 (instdir/program/libswlo.so +0xcc6e1cc)
> #14 in SwWW8Writer::Write(SwPaM&, SfxMedium&, rtl::OUString const*) at sw/source/filter/ww8/wrtww8.cxx:3562:31 (instdir/program/libmswordlo.so +0x1f513ff)
> #15 in SwWriter::Write(tools::SvRef<Writer> const&, rtl::OUString const*) at sw/source/filter/basflt/shellio.cxx:851:28 (instdir/program/libswlo.so +0xc56906f)
> #16 in SwDocShell::ConvertTo(SfxMedium&) at sw/source/uibase/app/docsh.cxx:813:27 (instdir/program/libswlo.so +0xd038645)
> #17 in SfxObjectShell::SaveTo_Impl(SfxMedium&, SfxItemSet const*) at sfx2/source/doc/objstor.cxx:1537:19 (instdir/program/libsfxlo.so +0x38c0383)
> #18 in SfxObjectShell::PreDoSaveAs_Impl(rtl::OUString const&, rtl::OUString const&, SfxItemSet const&) at sfx2/source/doc/objstor.cxx:2848:39 (instdir/program/libsfxlo.so +0x38ef860)
> #19 in SfxObjectShell::CommonSaveAs_Impl(INetURLObject const&, rtl::OUString const&, SfxItemSet&) at sfx2/source/doc/objstor.cxx:2705:9 (instdir/program/libsfxlo.so +0x38e8e40)
> #20 in SfxObjectShell::APISaveAs_Impl(rtl::OUString const&, SfxItemSet&) at sfx2/source/doc/objserv.cxx:308:19 (instdir/program/libsfxlo.so +0x38651b3)
> #21 in SfxBaseModel::impl_store(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, bool) at sfx2/source/doc/sfxbasemodel.cxx:2969:46 (instdir/program/libsfxlo.so +0x3a3ae5e)
> #22 in SfxBaseModel::storeToURL(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at sfx2/source/doc/sfxbasemodel.cxx:1639:13 (instdir/program/libsfxlo.so +0x3a40fa5)
> #23 in SwModelTestBase::reload(char const*, char const*, char const*) at sw/qa/extras/inc/swmodeltestbase.hxx:797:20 (workdir/LinkTarget/CppunitTest/libtest_sw_ww8export.so +0x3b3fb1)
> #24 in SwModelTestBase::executeImportExportImportTest(char const*, char const*) at sw/qa/extras/inc/swmodeltestbase.hxx:283:9 (workdir/LinkTarget/CppunitTest/libtest_sw_ww8export.so +0x3b25a8)
> #25 in testN760294::Import_Export_Import() at sw/qa/extras/ww8export/ww8export.cxx:133:1 (workdir/LinkTarget/CppunitTest/libtest_sw_ww8export.so +0x3c556d)
[...]
Change-Id: I673a96e9f7d2d1bdf40de20f3810c4986c338c93
Reviewed-on: https://gerrit.libreoffice.org/63301
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r-- | sw/source/filter/ww8/wrtww8.cxx | 4 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtww8.hxx | 1 |
2 files changed, 3 insertions, 2 deletions
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index cd4fd16f8534..f0ab7e1ed7c4 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -2350,7 +2350,7 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t const SwFormatHoriOrient &rHori = pFormat->GetHoriOrient(); const SwFormatVertOrient &rVert = pFormat->GetVertOrient(); - sal_uInt16 nTableOffset = 0; + SwTwips nTableOffset = 0; if ( (text::RelOrientation::PRINT_AREA == rHori.GetRelationOrient() || @@ -2384,7 +2384,7 @@ void WW8AttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t } } - m_rWW8Export.InsUInt16( nTableOffset ); + m_rWW8Export.InsInt16( nTableOffset ); ww8::GridColsPtr pGridCols = GetGridCols( pTableTextNodeInfoInner ); for ( const auto nCol : *pGridCols ) diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index 5f4d441aa5b5..0766d4df2c39 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -1122,6 +1122,7 @@ public: const ww8::Frame &rFrameFormat); void InsUInt16( sal_uInt16 n ) { SwWW8Writer::InsUInt16( *pO, n ); } + void InsInt16(sal_Int16 n) { InsUInt16(sal_uInt16(n)); } void InsUInt32( sal_uInt32 n ) { SwWW8Writer::InsUInt32( *pO, n ); } void WriteStringAsPara( const OUString& rText ); |