[Libreoffice-commits] core.git: 2 commits - include/basebmp

Caolán McNamara caolanm at redhat.com
Mon Aug 25 13:06:54 PDT 2014


 include/basebmp/clippedlinerenderer.hxx |   24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

New commits:
commit 6182437f8312e5823b3c9022993730428e572667
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Aug 25 11:31:30 2014 +0100

    return false if the clip region would div by zero
    
    Change-Id: Ia0928306b3608df9c48a19b517edac54ba43bd57

diff --git a/include/basebmp/clippedlinerenderer.hxx b/include/basebmp/clippedlinerenderer.hxx
index 077ff48..b3a5fd09 100644
--- a/include/basebmp/clippedlinerenderer.hxx
+++ b/include/basebmp/clippedlinerenderer.hxx
@@ -89,7 +89,12 @@ inline bool prepareClip( sal_Int32  a1,
 
         if( clipCode1 & (aMinFlag|aMaxFlag) )
         {
-            cb = (ca + da - int(!bRoundTowardsPt2)) / (2*da);
+            sal_Int32 da2 = 2*da;
+
+            if (da2 == 0)
+                return false; // overflow
+
+            cb = (ca + da - int(!bRoundTowardsPt2)) / (da2);
 
             if( sb >= 0 )
             {
@@ -104,11 +109,16 @@ inline bool prepareClip( sal_Int32  a1,
                     return false; // fully clipped
             }
 
-            io_rem += ca - 2*da*cb;
+            io_rem += ca - da2*cb;
         }
         else
         {
-            ca = (cb - da + 2*db - int(bRoundTowardsPt2)) / (2*db);
+            sal_Int32 db2 = 2*db;
+
+            if (db2 == 0)
+                return false; // overflow
+
+            ca = (cb - da + db2 - int(bRoundTowardsPt2)) / (db2);
             if( sa >= 0 )
             {
                 o_as = a1 + ca;
@@ -122,7 +132,7 @@ inline bool prepareClip( sal_Int32  a1,
                     return false; // fully clipped
             }
 
-            io_rem += 2*db*ca - cb;
+            io_rem += db2*ca - cb;
         }
     }
     else
commit 739adde53bf93afa1d1cd2ea2ecaf0754feec934
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Aug 25 11:22:04 2014 +0100

    detect conditions where loop cannot logically end
    
    Change-Id: I7e2ec1e09614510e6798ba8d5b9990c189a8dbb9

diff --git a/include/basebmp/clippedlinerenderer.hxx b/include/basebmp/clippedlinerenderer.hxx
index acb9cda..077ff48 100644
--- a/include/basebmp/clippedlinerenderer.hxx
+++ b/include/basebmp/clippedlinerenderer.hxx
@@ -269,6 +269,9 @@ void renderClippedLine( basegfx::B2IPoint             aPt1,
 
         if( bUseAlternateBresenham )
         {
+            if (rem < 0 && ady <= 0)
+                return; //break will never be hit under these circumstances
+
             while(true)
             {
                 acc.set(color, rowIter);
@@ -347,6 +350,9 @@ void renderClippedLine( basegfx::B2IPoint             aPt1,
 
         if( bUseAlternateBresenham )
         {
+            if (rem < 0 && adx <= 0)
+                return; //break will never be hit under these circumstances
+
             while(true)
             {
                 acc.set(color, colIter);


More information about the Libreoffice-commits mailing list