diff options
-rw-r--r-- | oox/source/drawingml/fillproperties.cxx | 12 | ||||
-rw-r--r-- | sd/qa/unit/data/pptx/croppedTo0.pptx | bin | 32741 -> 12974 bytes | |||
-rw-r--r-- | sd/qa/unit/import-tests2.cxx | 1 |
3 files changed, 9 insertions, 4 deletions
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx index 11f42457bc8d..f7dc16bf231b 100644 --- a/oox/source/drawingml/fillproperties.cxx +++ b/oox/source/drawingml/fillproperties.cxx @@ -97,8 +97,10 @@ Quotients getQuotients(geometry::IntegerRectangle2D aRelRect, double hDiv, doubl // ECMA-376 Part 1 20.1.8.55 srcRect (Source Rectangle) std::optional<Quotients> CropQuotientsFromSrcRect(geometry::IntegerRectangle2D aSrcRect) { - // Currently the following precondition is guaranteed in GraphicProperties::pushToPropMap - assert(aSrcRect.X1 >= 0 && aSrcRect.X2 >= 0 && aSrcRect.Y1 >= 0 && aSrcRect.Y2 >= 0); + aSrcRect.X1 = std::max(aSrcRect.X1, sal_Int32(0)); + aSrcRect.X2 = std::max(aSrcRect.X2, sal_Int32(0)); + aSrcRect.Y1 = std::max(aSrcRect.Y1, sal_Int32(0)); + aSrcRect.Y2 = std::max(aSrcRect.Y2, sal_Int32(0)); if (aSrcRect.X1 + aSrcRect.X2 >= 100'000 || aSrcRect.Y1 + aSrcRect.Y2 >= 100'000) return {}; // Cropped everything return getQuotients(aSrcRect, 100'000.0, 100'000.0); @@ -107,8 +109,10 @@ std::optional<Quotients> CropQuotientsFromSrcRect(geometry::IntegerRectangle2D a // ECMA-376 Part 1 20.1.8.30 fillRect (Fill Rectangle) std::optional<Quotients> CropQuotientsFromFillRect(geometry::IntegerRectangle2D aFillRect) { - // Currently the following precondition is guaranteed in FillProperties::pushToPropMap - assert(aFillRect.X1 <= 0 && aFillRect.X2 <= 0 && aFillRect.Y1 <= 0 && aFillRect.Y2 <= 0); + aFillRect.X1 = std::min(aFillRect.X1, sal_Int32(0)); + aFillRect.X2 = std::min(aFillRect.X2, sal_Int32(0)); + aFillRect.Y1 = std::min(aFillRect.Y1, sal_Int32(0)); + aFillRect.Y2 = std::min(aFillRect.Y2, sal_Int32(0)); // Negative divisor and negative relative offset give positive value wanted in lclCropGraphic return getQuotients(aFillRect, -100'000.0 + aFillRect.X1 + aFillRect.X2, -100'000.0 + aFillRect.Y1 + aFillRect.Y2); diff --git a/sd/qa/unit/data/pptx/croppedTo0.pptx b/sd/qa/unit/data/pptx/croppedTo0.pptx Binary files differindex fecf53559b1f..081661f48601 100644 --- a/sd/qa/unit/data/pptx/croppedTo0.pptx +++ b/sd/qa/unit/data/pptx/croppedTo0.pptx diff --git a/sd/qa/unit/import-tests2.cxx b/sd/qa/unit/import-tests2.cxx index 7bf052ca0bdc..33bbcca615b7 100644 --- a/sd/qa/unit/import-tests2.cxx +++ b/sd/qa/unit/import-tests2.cxx @@ -2056,6 +2056,7 @@ void SdImportTest2::testDefaultTabStop() void SdImportTest2::testCropToZero() { // Must not crash because of division by zero + // Also must not fail assertions because of passing negative value to CropQuotientsFromSrcRect loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/croppedTo0.pptx"), PPTX); } |