[Libreoffice-commits] core.git: vcl/source

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Mon Feb 22 20:44:54 UTC 2021


 vcl/source/outdev/map.cxx |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit a1d987cf3d0e1ae4d87f7d06ae93e71a0cc59f0c
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Mon Feb 22 16:24:43 2021 +0100
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Mon Feb 22 21:44:11 2021 +0100

    Fix computation of aF fraction in OutputDevice::SetRelativeMapMode
    
    ...where cfff893b9c82843a90aac4ecdb3a3936721b74a0 "Move unit conversion code to
    o3tl, and unify on that in more places" had apparently switched the numerator
    and denominator arguments passed into the Fraction constructor.  (And give the
    two values returned by o3tl::getConversionMulDiv less misleading names.)
    
    This had caused e.g. UITest_conditional_format
    UITEST_TEST_NAME=tdf100793.tdf100793.test_tdf100793 to fail in a
    (--without-system-cairo) UBSan build with
    
    > cairo-slope-private.h:50:22: runtime error: signed integer overflow: -2126627072 - 135139840 cannot be represented in type 'int'
    >  #0 in _cairo_slope_init at workdir/UnpackedTarball/cairo/src/./cairo-slope-private.h:50:22
    >  #1 in _cairo_path_fixed_line_to at workdir/UnpackedTarball/cairo/src/cairo-path-fixed.c:517:6
    >  #2 in _cairo_default_context_line_to at workdir/UnpackedTarball/cairo/src/cairo-default-context.c:715:12
    >  #3 in cairo_line_to at workdir/UnpackedTarball/cairo/src/cairo.c:1743:14
    >  #4 in AddPolygonToPath(_cairo*, basegfx::B2DPolygon const&, basegfx::B2DHomMatrix const&, bool, bool) at vcl/headless/svpgdi.cxx:1291:13
    >  #5 in (anonymous namespace)::add_polygon_path(_cairo*, basegfx::B2DPolyPolygon const&, basegfx::B2DHomMatrix const&, bool) at vcl/headless/svpgdi.cxx:1821:33
    >  #6 in SvpSalGraphics::drawPolyPolygon(basegfx::B2DHomMatrix const&, basegfx::B2DPolyPolygon const&, double) at vcl/headless/svpgdi.cxx:1879:9
    >  #7 in SvpSalGraphics::drawRect(long, long, long, long) at vcl/headless/svpgdi.cxx:1059:9
    >  #8 in SalGraphics::DrawRect(long, long, long, long, OutputDevice const&) at vcl/source/gdi/salgdilayout.cxx:373:5
    >  #9 in OutputDevice::DrawRect(tools::Rectangle const&) at vcl/source/outdev/rect.cxx:83:17
    >  #10 in (anonymous namespace)::drawCells(OutputDevice&, std::optional<Color> const&, SvxBrushItem const*, std::optional<Color>&, SvxBrushItem const*&, tools::Rectangle&, long, long, long, long, ScDataBarInfo const*, ScDataBarInfo const*&, ScIconSetInfo const*, ScIconSetInfo const*&, std::__debug::map<rtl::OUString, BitmapEx, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, BitmapEx> > >&) at sc/source/ui/view/output.cxx:947:32
    >  #11 in ScOutputData::DrawBackground(OutputDevice&) at sc/source/ui/view/output.cxx:1116:21
    >  #12 in ScPrintFunc::DrawToDev(ScDocument&, OutputDevice*, double, tools::Rectangle const&, ScViewData*, bool) at sc/source/ui/view/printfun.cxx:594:17
    >  #13 in ScDocShell::Draw(OutputDevice*, JobSetup const&, unsigned short) at sc/source/ui/docshell/docsh4.cxx:2146:9
    >  #14 in SfxObjectShell::DoDraw_Impl(OutputDevice*, Point const&, Fraction const&, Fraction const&, JobSetup const&, unsigned short) at sfx2/source/doc/objembed.cxx:194:5
    >  #15 in SfxObjectShell::DoDraw(OutputDevice*, Point const&, Size const&, JobSetup const&, unsigned short) at sfx2/source/doc/objembed.cxx:141:9
    >  #16 in SfxObjectShell::CreatePreview_Impl(bool, VirtualDevice*, GDIMetaFile*) const at sfx2/source/doc/objcont.cxx:199:40
    >  #17 in SfxObjectShell::GetPreviewBitmap() const at sfx2/source/doc/objcont.cxx:110:9
    >  #18 in SfxPickListImpl::AddDocumentToPickList(SfxObjectShell const*) at sfx2/source/appl/sfxpicklist.cxx:120:46
    >  #19 in SfxPickListImpl::Notify(SfxBroadcaster&, SfxHint const&) at sfx2/source/appl/sfxpicklist.cxx:208:13
    >  #20 in SfxBroadcaster::Broadcast(SfxHint const&) at svl/source/notify/SfxBroadcaster.cxx:39:24
    >  #21 in (anonymous namespace)::SfxEventAsyncer_Impl::IdleHdl(Timer*) at sfx2/source/appl/appcfg.cxx:105:19
    >  #22 in (anonymous namespace)::SfxEventAsyncer_Impl::LinkStubIdleHdl(void*, Timer*) at sfx2/source/appl/appcfg.cxx:100:1
    >  #23 in Link<Timer*, void>::Call(Timer*) const at include/tools/link.hxx:111:45
    >  #24 in Timer::Invoke() at vcl/source/app/timer.cxx:75:21
    >  #25 in Scheduler::ProcessTaskScheduling() at vcl/source/app/scheduler.cxx:476:20
    >  #26 in Scheduler::CallbackTaskScheduling() at vcl/source/app/scheduler.cxx:266:5
    >  #27 in SalTimer::CallCallback() at vcl/inc/saltimer.hxx:54:13
    >  #28 in SvpSalInstance::CheckTimeout(bool) at vcl/headless/svpinst.cxx:210:53
    >  #29 in SvpSalInstance::DoYield(bool, bool) at vcl/headless/svpinst.cxx:463:21
    >  #30 in ImplYield(bool, bool) at vcl/source/app/svapp.cxx:463:48
    >  #31 in Application::Yield() at vcl/source/app/svapp.cxx:530:5
    >  #32 in Application::Execute() at vcl/source/app/svapp.cxx:442:9
    >  #33 in desktop::Desktop::Main() at desktop/source/app/app.cxx:1586:13
    >  #34 in ImplSVMain() at vcl/source/app/svmain.cxx:196:35
    >  #35 in SVMain() at vcl/source/app/svmain.cxx:228:12
    >  #36 in soffice_main at desktop/source/app/sofficemain.cxx:98:12
    >  #37 in sal_main at desktop/source/app/main.c:49:15
    >  #38 in main at desktop/source/app/main.c:47:1
    
    because aF was computed as 2540/1 instead of 1/2540 now.
    
    Change-Id: I092e6afe8cf2ea3145befccf075252b8e09f0967
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111347
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
    Tested-by: Jenkins

diff --git a/vcl/source/outdev/map.cxx b/vcl/source/outdev/map.cxx
index e899fdc96fa4..78787aef6207 100644
--- a/vcl/source/outdev/map.cxx
+++ b/vcl/source/outdev/map.cxx
@@ -673,8 +673,8 @@ void OutputDevice::SetRelativeMapMode( const MapMode& rNewMapMode )
         {
             const auto eFrom = MapToO3tlLength(eOld, o3tl::Length::in);
             const auto eTo = MapToO3tlLength(eNew, o3tl::Length::in);
-            const auto& [nNum, nDen] = o3tl::getConversionMulDiv(eFrom, eTo);
-            Fraction aF(nNum, nDen);
+            const auto& [mul, div] = o3tl::getConversionMulDiv(eFrom, eTo);
+            Fraction aF(div, mul);
 
             // a?F =  a?F * aF
             aXF = ImplMakeFraction( aXF.GetNumerator(),   aF.GetNumerator(),


More information about the Libreoffice-commits mailing list