From 3f0220f18a66630e06e3c128980f21a5722f49ca Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Wed, 17 Apr 2024 21:16:23 +0100 Subject: Handle empty range properly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since commit 690526f95e3ee4fd25bb2c987e093543e4bc435b (Generalize basegfx::fround for templated return type, 2024-04-14), an assertion could fail for certain case, like include/o3tl/unit_conversion.hxx:75: sal_Int64 o3tl::detail::MulDiv(I, sal_Int64, sal_Int64) [I = long]: Assertion `isBetween(n, (SAL_MIN_INT64 + d / 2) / m, (SAL_MAX_INT64 - d / 2) / m)' The problem was unchecked case of empty B2DRange. Change-Id: Ice9125ea557b73a7fabf64bc1ad9368f503ad525 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166101 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- filter/source/msfilter/eschesdo.cxx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/filter/source/msfilter/eschesdo.cxx b/filter/source/msfilter/eschesdo.cxx index 6a17fff242a0..b21534676e4c 100644 --- a/filter/source/msfilter/eschesdo.cxx +++ b/filter/source/msfilter/eschesdo.cxx @@ -1156,10 +1156,19 @@ void ImplEESdrObject::Init() { // if it's a group, the unrotated range is needed for that group const basegfx::B2DRange aUnrotatedRange(getUnrotatedGroupBoundRange(mXShape)); - const Point aNewP(basegfx::fround(aUnrotatedRange.getMinX()), basegfx::fround(aUnrotatedRange.getMinY())); - const Size aNewS(basegfx::fround(aUnrotatedRange.getWidth()), basegfx::fround(aUnrotatedRange.getHeight())); + if (aUnrotatedRange.isEmpty()) + { + SetRect(tools::Rectangle()); + } + else + { + const Point aNewP(basegfx::fround(aUnrotatedRange.getMinX()), + basegfx::fround(aUnrotatedRange.getMinY())); + const Size aNewS(basegfx::fround(aUnrotatedRange.getWidth()), + basegfx::fround(aUnrotatedRange.getHeight())); - SetRect(ImplEESdrWriter::ImplMapPoint(aNewP), ImplEESdrWriter::ImplMapSize(aNewS)); + SetRect(ImplEESdrWriter::ImplMapPoint(aNewP), ImplEESdrWriter::ImplMapSize(aNewS)); + } } else { -- cgit