[Libreoffice-commits] core.git: Branch 'libreoffice-5-3' - tools/inc tools/source

Caolán McNamara caolanm at redhat.com
Mon Jan 2 11:55:38 UTC 2017


 tools/inc/poly.h              |    2 +-
 tools/source/generic/poly.cxx |   13 +++++++++----
 2 files changed, 10 insertions(+), 5 deletions(-)

New commits:
commit 6431e2bff67e81b4aff4e3b52e67903e1cd566f3
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Jan 2 11:53:31 2017 +0000

    ofz#372 check if ImplSplit succeeded
    
    Change-Id: I1e34295fe3ee5f77e787f583616d52fa92a0eca4
    (cherry picked from commit 62a97e6a561ce65e88d4c537a1b82c336f012722)

diff --git a/tools/inc/poly.h b/tools/inc/poly.h
index 3be1189..8ed36ed 100644
--- a/tools/inc/poly.h
+++ b/tools/inc/poly.h
@@ -42,7 +42,7 @@ public:
 
     void            ImplSetSize( sal_uInt16 nSize, bool bResize = true );
     void            ImplCreateFlagArray();
-    void            ImplSplit( sal_uInt16 nPos, sal_uInt16 nSpace, ImplPolygon const * pInitPoly = nullptr );
+    bool            ImplSplit( sal_uInt16 nPos, sal_uInt16 nSpace, ImplPolygon const * pInitPoly = nullptr );
 };
 
 #define MAX_POLYGONS        ((sal_uInt16)0x3FF0)
diff --git a/tools/source/generic/poly.cxx b/tools/source/generic/poly.cxx
index a49d998..6a1a5a2 100644
--- a/tools/source/generic/poly.cxx
+++ b/tools/source/generic/poly.cxx
@@ -212,11 +212,14 @@ void ImplPolygon::ImplSetSize( sal_uInt16 nNewSize, bool bResize )
     mnPoints   = nNewSize;
 }
 
-void ImplPolygon::ImplSplit( sal_uInt16 nPos, sal_uInt16 nSpace, ImplPolygon const * pInitPoly )
+bool ImplPolygon::ImplSplit( sal_uInt16 nPos, sal_uInt16 nSpace, ImplPolygon const * pInitPoly )
 {
     //Can't fit this in :-(, throw ?
     if (mnPoints + nSpace > USHRT_MAX)
-        return;
+    {
+        SAL_WARN("tools", "Polygon needs " << mnPoints + nSpace << " points, but only " << USHRT_MAX << " possible");
+        return false;
+    }
 
     const sal_uInt16    nNewSize = mnPoints + nSpace;
     const std::size_t   nSpaceSize = static_cast<std::size_t>(nSpace) * sizeof(Point);
@@ -272,6 +275,8 @@ void ImplPolygon::ImplSplit( sal_uInt16 nPos, sal_uInt16 nSpace, ImplPolygon con
         mpPointAry = pNewAry;
         mnPoints   = nNewSize;
     }
+
+    return true;
 }
 
 void ImplPolygon::ImplCreateFlagArray()
@@ -1473,8 +1478,8 @@ void Polygon::Insert( sal_uInt16 nPos, const Point& rPt )
     if( nPos >= mpImplPolygon->mnPoints )
         nPos = mpImplPolygon->mnPoints;
 
-    mpImplPolygon->ImplSplit( nPos, 1 );
-    mpImplPolygon->mpPointAry[ nPos ] = rPt;
+    if (mpImplPolygon->ImplSplit(nPos, 1))
+        mpImplPolygon->mpPointAry[ nPos ] = rPt;
 }
 
 void Polygon::Insert( sal_uInt16 nPos, const tools::Polygon& rPoly )


More information about the Libreoffice-commits mailing list