summaryrefslogtreecommitdiff
path: root/svx/source/sdr/contact
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-01-12 16:42:05 +0000
committerMichael Stahl <mstahl@redhat.com>2017-01-16 16:05:57 +0000
commit0c39bdd960aaa363fd1fcf6608809d3a6068a3d4 (patch)
tree90139b9aa3c9d0061bd50967c49768237d80c775 /svx/source/sdr/contact
parentc6cbcf3b6f2c38acfd346abb712e5c4c622ad0a0 (diff)
Resolves: tdf#101187 colossal page width wraps around if doubled
when trying to generate a reasonable upper bound clipping region Change-Id: I53f8ea1bd6c52c88284e1f41369f83492d078b5d (cherry picked from commit 2fd88ab1cbb4690a770ca2ca5d66157ec4906a2e) Reviewed-on: https://gerrit.libreoffice.org/33008 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'svx/source/sdr/contact')
-rw-r--r--svx/source/sdr/contact/viewcontactofsdrpathobj.cxx39
1 files changed, 22 insertions, 17 deletions
diff --git a/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx b/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
index 2b0e78ad391e..78455f4038f8 100644
--- a/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrpathobj.cxx
@@ -99,23 +99,28 @@ namespace sdr
sal_Int32 nPageWidth = pPage ? pPage->GetWdt() : 0;
sal_Int32 nPageHeight = pPage ? pPage->GetHgt() : 0;
- //But, see tdf#97276 and tdf#98366. Don't clip too much if the
- //underlying page dimension is unknown or a paste document
- //where the page sizes use the odd default of 10x10
- nPageWidth = std::max<sal_Int32>(21000, nPageWidth);
- nPageHeight = std::max<sal_Int32>(29700, nPageHeight);
- basegfx::B2DRange aClipRange(-nPageWidth, -nPageHeight,
- nPageWidth*2, nPageHeight*2);
-
- aUnitPolyPolygon = basegfx::tools::clipPolyPolygonOnRange(aUnitPolyPolygon,
- aClipRange, true, true);
- nPolyCount = ensureGeometry(aUnitPolyPolygon);
-
- // re-check that we have't been clipped out to oblivion
- bIsLine =
- !aUnitPolyPolygon.areControlPointsUsed()
- && 1 == nPolyCount
- && 2 == aUnitPolyPolygon.getB2DPolygon(0).count();
+ //But, see tdf#101187, only do this if our generous clip region
+ //would not over flow into a tiny clip region
+ if (nPageWidth < SAL_MAX_INT32/2 && nPageHeight < SAL_MAX_INT32/2)
+ {
+ //But, see tdf#97276 and tdf#98366. Don't clip too much if the
+ //underlying page dimension is unknown or a paste document
+ //where the page sizes use the odd default of 10x10
+ nPageWidth = std::max<sal_Int32>(21000, nPageWidth);
+ nPageHeight = std::max<sal_Int32>(29700, nPageHeight);
+ basegfx::B2DRange aClipRange(-nPageWidth, -nPageHeight,
+ nPageWidth*2, nPageHeight*2);
+
+ aUnitPolyPolygon = basegfx::tools::clipPolyPolygonOnRange(aUnitPolyPolygon,
+ aClipRange, true, true);
+ nPolyCount = ensureGeometry(aUnitPolyPolygon);
+
+ // re-check that we have't been clipped out to oblivion
+ bIsLine =
+ !aUnitPolyPolygon.areControlPointsUsed()
+ && 1 == nPolyCount
+ && 2 == aUnitPolyPolygon.getB2DPolygon(0).count();
+ }
}
if(bIsLine)