Handle empty range properly

Since commit 690526f95e
(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.mcnamara@collabora.com>
This commit is contained in:
Mike Kaganski
2024-04-18 21:28:16 +02:00
committed by Caolán McNamara
parent edfe8adcec
commit 3f0220f18a
+12 -3
View File
@@ -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
{