[Libreoffice-commits] core.git: vcl/headless
Stephan Bergmann
sbergman at redhat.com
Fri Feb 5 08:52:35 UTC 2016
vcl/headless/svpgdi.cxx | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
New commits:
commit 10ed6326346ea44202f75e87cce99d2aab8c7939
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Fri Feb 5 09:48:36 2016 +0100
Re-add "Avoid undefined out-of-bounds double -> sal_Int32 conversion"
(5abe0ab18a10a3cb13485ce3ba9433bd82b32221).
6884f53ac490c11b98a77e747033f4971cc285f5 "default B2DRange ctor doesn't do what
I thought it did" had reverted it, but the fix there is apparently not enough
yet, <http://ci.libreoffice.org/job/lo_ubsan/165/console> still fails with
> /vcl/headless/svpgdi.cxx:1274:28: runtime error: value 1.79769e+308 is outside the range of representable values of type 'int'
> #0 0x2b826285b4d3 in SvpSalGraphics::releaseCairoContext(_cairo*, bool, basegfx::B2DRange const&) const /vcl/headless/svpgdi.cxx:1274:28
> #1 0x2b8262868c3b in SvpSalGraphics::drawPolyPolygon(basegfx::B2DPolyPolygon const&) /vcl/headless/svpgdi.cxx:899:5
> #2 0x2b826286c6f6 in SvpSalGraphics::drawPolygon(unsigned int, SalPoint const*) /vcl/headless/svpgdi.cxx:551:5
> #3 0x2b826179915c in SalGraphics::DrawPolygon(unsigned int, SalPoint const*, OutputDevice const*) /vcl/source/gdi/salgdilayout.cxx:419:9
> #4 0x2b82604d6f5a in OutputDevice::DrawEllipse(Rectangle const&) /vcl/source/outdev/curvedshapes.cxx:67:13
> #5 0x2b8261f02c4d in CircType::Draw(OutputDevice&) /vcl/source/filter/sgvmain.cxx:596:13
> #6 0x2b8261f0ddc6 in DrawObjkList(SvStream&, OutputDevice&) /vcl/source/filter/sgvmain.cxx:698:100
> #7 0x2b8261f1462a in SgfFilterSDrw(SvStream&, SgfHeader&, SgfEntry&, GDIMetaFile&) /vcl/source/filter/sgvmain.cxx:820:26
> #8 0x2b8261f16726 in SgfSDrwFilter(SvStream&, GDIMetaFile&, INetURLObject const&) /vcl/source/filter/sgvmain.cxx:858:22
> #9 0x2b8261e48f33 in GraphicFilter::ImportGraphic(Graphic&, rtl::OUString const&, SvStream&, unsigned short, unsigned short*, GraphicFilterImportFlags, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>*, WMF_EXTERNALHEADER*) /vcl/source/filter/graphicfilter.cxx:1670:30
> #10 0x2b8261e3c85a in GraphicFilter::ImportGraphic(Graphic&, rtl::OUString const&, SvStream&, unsigned short, unsigned short*, GraphicFilterImportFlags, WMF_EXTERNALHEADER*) /vcl/source/filter/graphicfilter.cxx:1314:12
> #11 0x2b827bb9fee3 in VclFiltersTest::load(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int) /vcl/qa/cppunit/graphicfilter/filters-test.cxx:60:12
[...]
Change-Id: Icb8f52414f57f08334fc501842b3f75c1d3642eb
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index bebf53e..9c9de74 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -1271,8 +1271,21 @@ cairo_user_data_key_t* SvpSalGraphics::getDamageKey()
void SvpSalGraphics::releaseCairoContext(cairo_t* cr, bool bXorModeAllowed, const basegfx::B2DRange& rExtents) const
{
- sal_Int32 nExtentsLeft(rExtents.getMinX()), nExtentsTop(rExtents.getMinY());
- sal_Int32 nExtentsRight(rExtents.getMaxX()), nExtentsBottom(rExtents.getMaxY());
+ sal_Int32 nExtentsLeft;
+ sal_Int32 nExtentsTop;
+ sal_Int32 nExtentsRight;
+ sal_Int32 nExtentsBottom;
+ if (rExtents.isEmpty()) {
+ nExtentsLeft = 0;
+ nExtentsTop = 0;
+ nExtentsRight = 0;
+ nExtentsBottom = 0;
+ } else {
+ nExtentsLeft = rExtents.getMinX();
+ nExtentsTop = rExtents.getMinY();
+ nExtentsRight = rExtents.getMaxX();
+ nExtentsBottom = rExtents.getMaxY();
+ }
sal_Int32 nWidth = cairo_image_surface_get_width(m_pSurface);
sal_Int32 nHeight = cairo_image_surface_get_height(m_pSurface);
nExtentsLeft = std::max<sal_Int32>(nExtentsLeft, 0);
More information about the Libreoffice-commits
mailing list