filter/source/msfilter/eschesdo.cxx |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

New commits:
commit 3f0220f18a66630e06e3c128980f21a5722f49ca
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Wed Apr 17 21:16:23 2024 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Thu Apr 18 21:28:16 2024 +0200

    Handle empty range properly
    
    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 <caolan.mcnam...@collabora.com>

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<tools::Long>(aUnrotatedRange.getMinX()), 
basegfx::fround<tools::Long>(aUnrotatedRange.getMinY()));
-        const Size 
aNewS(basegfx::fround<tools::Long>(aUnrotatedRange.getWidth()), 
basegfx::fround<tools::Long>(aUnrotatedRange.getHeight()));
+        if (aUnrotatedRange.isEmpty())
+        {
+            SetRect(tools::Rectangle());
+        }
+        else
+        {
+            const Point 
aNewP(basegfx::fround<tools::Long>(aUnrotatedRange.getMinX()),
+                              
basegfx::fround<tools::Long>(aUnrotatedRange.getMinY()));
+            const Size 
aNewS(basegfx::fround<tools::Long>(aUnrotatedRange.getWidth()),
+                             
basegfx::fround<tools::Long>(aUnrotatedRange.getHeight()));
 
-        SetRect(ImplEESdrWriter::ImplMapPoint(aNewP), 
ImplEESdrWriter::ImplMapSize(aNewS));
+            SetRect(ImplEESdrWriter::ImplMapPoint(aNewP), 
ImplEESdrWriter::ImplMapSize(aNewS));
+        }
     }
     else
     {

Reply via email to