Avoid UBSan signed-integer-overflow
...by reverting the part of acf75a9b26 "Drop some
unnecessary explicit casts" that started to make CppunitTest_vcl_pdfexport2 fail
with
> /workdir/UnpackedTarball/boost/boost/rational.hpp:604:22: runtime error: signed integer overflow: 350932797 * 10 cannot be represented in type 'int'
> #0 0x7f56315d94f1 in boost::rational<int>::operator/=(boost::rational<int> const&) /workdir/UnpackedTarball/boost/boost/rational.hpp:604:22
> #1 0x7f56315d12dd in Fraction::operator/=(Fraction const&) /tools/source/generic/fract.cxx:239:7
> #2 0x7f56315d40e8 in operator/(Fraction const&, Fraction const&) /tools/source/generic/fract.cxx:335:10
> #3 0x7f5626bafc3f in vcl::PDFWriterImpl::drawLayout(SalLayout&, rtl::OUString const&, bool) /vcl/source/pdf/pdfwriter_impl.cxx:6767:69
> #4 0x7f5626bcc194 in vcl::PDFWriterImpl::drawTextArray(Point const&, rtl::OUString const&, std::span<double const, 18446744073709551615ul>, std::span<unsigned char const, 18446744073709551615ul>, int, int, int, int) /vcl/source/pdf/pdfwriter_impl.cxx:7269:9
> #5 0x7f5626a30fdd in vcl::PDFWriter::DrawTextArray(Point const&, rtl::OUString const&, std::span<double const, 18446744073709551615ul>, std::span<unsigned char const, 18446744073709551615ul>, int, int, int, int) /vcl/source/pdf/pdfwriter.cxx:87:22
> #6 0x7f5626a58a6f in vcl::PDFWriterImpl::playMetafile(GDIMetaFile const&, vcl::PDFExtOutDevData*, vcl::PDFWriter::PlayMetafileContext const&, VirtualDevice*) /vcl/source/pdf/pdfwriter_impl2.cxx:821:34
> #7 0x7f5626a3a9a5 in vcl::PDFWriter::PlayMetafile(GDIMetaFile const&, vcl::PDFWriter::PlayMetafileContext const&, vcl::PDFExtOutDevData*) /vcl/source/pdf/pdfwriter.cxx:474:22
> #8 0x7f5599ef9e75 in PDFExport::ImplExportPage(vcl::PDFWriter&, vcl::PDFExtOutDevData&, GDIMetaFile const&) /filter/source/pdf/pdfexport.cxx:1333:13
> #9 0x7f5599ef807c in PDFExport::ExportSelection(vcl::PDFWriter&, com::sun::star::uno::Reference<com::sun::star::view::XRenderable> const&, com::sun::star::uno::Any const&, StringRangeEnumerator const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&, int) /filter/source/pdf/pdfexport.cxx:212:25
> #10 0x7f5599f11329 in PDFExport::Export(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /filter/source/pdf/pdfexport.cxx:1180:28
> #11 0x7f5599f86342 in PDFFilter::implExport(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /filter/source/pdf/pdffilter.cxx:182:24
> #12 0x7f5599f87093 in PDFFilter::filter(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /filter/source/pdf/pdffilter.cxx:247:23
> #13 0x7f55df8d3f26 in SfxObjectShell::ExportTo(SfxMedium&) /sfx2/source/doc/objstor.cxx:2908:25
> #14 0x7f55df8bf658 in SfxObjectShell::SaveTo_Impl(SfxMedium&, SfxItemSet const*) /sfx2/source/doc/objstor.cxx:1929:19
> #15 0x7f55df8fbf63 in SfxObjectShell::PreDoSaveAs_Impl(rtl::OUString const&, rtl::OUString const&, SfxItemSet const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /sfx2/source/doc/objstor.cxx:3421:39
> #16 0x7f55df8f383c in SfxObjectShell::CommonSaveAs_Impl(INetURLObject const&, rtl::OUString const&, SfxItemSet&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /sfx2/source/doc/objstor.cxx:3212:9
> #17 0x7f55df82ca66 in SfxObjectShell::APISaveAs_Impl(std::basic_string_view<char16_t, std::char_traits<char16_t> >, SfxItemSet&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /sfx2/source/doc/objserv.cxx:323:19
> #18 0x7f55dfb19501 in SfxBaseModel::impl_store(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, bool) /sfx2/source/doc/sfxbasemodel.cxx:3253:42
> #19 0x7f55dfb20834 in SfxBaseModel::storeToURL(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /sfx2/source/doc/sfxbasemodel.cxx:1834:13
> #20 0x7f5603982e5a in UnoApiTest::saveWithParams(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /test/source/unoapi_test.cxx:194:16
> #21 0x7f5604ee9776 in (anonymous namespace)::PdfExportTest2::saveAsPDF(std::basic_string_view<char16_t, std::char_traits<char16_t> >) /vcl/qa/cppunit/pdfexport/pdfexport2.cxx:76:5
> #22 0x7f560518fa16 in (anonymous namespace)::testTdf145873::TestBody() /vcl/qa/cppunit/pdfexport/pdfexport2.cxx:4171:5
(<https://ci.libreoffice.org/job/lo_ubsan/3685/>)
Change-Id: I607d1b66bdae9cece0102a99ef817864b3d27877
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191928
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@collabora.com>
This commit is contained in:
@@ -6764,7 +6764,7 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
|
||||
// if the mapmode is distorted we need to adjust for that also
|
||||
if( m_aCurrentPDFState.m_aMapMode.GetScaleX() != m_aCurrentPDFState.m_aMapMode.GetScaleY() )
|
||||
{
|
||||
fXScale *= double(m_aCurrentPDFState.m_aMapMode.GetScaleX() / m_aCurrentPDFState.m_aMapMode.GetScaleY());
|
||||
fXScale *= double(m_aCurrentPDFState.m_aMapMode.GetScaleX()) / double(m_aCurrentPDFState.m_aMapMode.GetScaleY());
|
||||
}
|
||||
|
||||
Degree10 nAngle = m_aCurrentPDFState.m_aFont.GetOrientation();
|
||||
|
||||
Reference in New Issue
Block a user