[Libreoffice-commits] core.git: filter/source

Caolán McNamara caolanm at redhat.com
Thu Oct 22 05:19:59 PDT 2015


 filter/source/svg/gfxtypes.hxx |  123 +++++++++++++++++++++--------------------
 1 file changed, 65 insertions(+), 58 deletions(-)

New commits:
commit 04c8cd78b9c7f4bc72605993098f704bcfe20b56
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Oct 22 12:22:46 2015 +0100

    crashtesting+ubsan: rhbz1013652-3.svg outside the representable value range
    
    Change-Id: I1ddfd8f7ee779a87825345bf29feb14150713cbc

diff --git a/filter/source/svg/gfxtypes.hxx b/filter/source/svg/gfxtypes.hxx
index b7047a8..6c81e97 100644
--- a/filter/source/svg/gfxtypes.hxx
+++ b/filter/source/svg/gfxtypes.hxx
@@ -13,6 +13,7 @@
 #include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/polygon/b2dlinegeometry.hxx>
 #include <rtl/ustring.hxx>
+#include <functional>
 #include <unordered_set>
 #include <unordered_map>
 
@@ -192,7 +193,7 @@ struct State
     basegfx::B2DRange           maViewBox;
 
     bool                        mbIsText;
-    OUString               maFontFamily;
+    OUString                    maFontFamily;
     /** Absolute: xx-small=6.94 | x-small=8.33 | small=10 | medium=12 | large=14.4 | x-large=17.28 | xx-large=20.736
 
         Relative(to parent): larger (enlarge by 1.2)
@@ -200,8 +201,8 @@ struct State
 
      */
     double                      mnFontSize;
-    OUString               maFontStyle;
-    OUString               maFontVariant;
+    OUString                    maFontStyle;
+    OUString                    maFontVariant;
     double                      mnFontWeight;
 
     TextAlign                   meTextAnchor; // text-anchor
@@ -277,65 +278,71 @@ inline bool operator==(const State& rLHS, const State& rRHS )
         rLHS.maViewportFillGradient==rRHS.maViewportFillGradient;
 }
 
-struct StateHash
+} // namespace svgi
+
+namespace std
 {
-    size_t operator()(const State& rState ) const
+    template<> struct hash<svgi::State>
     {
-        return size_t(rState.maCTM.get( 0, 0 ))
-            ^  size_t(rState.maCTM.get( 1, 0 ))
-            ^  size_t(rState.maCTM.get( 0, 1 ))
-            ^  size_t(rState.maCTM.get( 1, 1 ))
-            ^  size_t(rState.maCTM.get( 0, 2 ))
-            ^  size_t(rState.maCTM.get( 1, 2 ))
-            ^  size_t(rState.maViewport.getWidth())
-            ^  size_t(rState.maViewport.getHeight())
-            ^  size_t(rState.maViewBox.getWidth())
-            ^  size_t(rState.maViewBox.getHeight())
-            ^  size_t(rState.mbIsText)
-            ^  size_t(rState.maFontFamily.hashCode())
-            ^  size_t(rState.mnFontSize)
-            ^  size_t(rState.maFontStyle.hashCode())
-            ^  size_t(rState.maFontVariant.hashCode())
-            ^  size_t(rState.mnFontWeight)
-            ^  size_t(rState.meTextAnchor)
-            ^  size_t(rState.meTextDisplayAlign)
-            ^  size_t(rState.mnTextLineIncrement)
-            ^  size_t(rState.mbVisibility)
-            ^  size_t(rState.meFillType)
-            ^  size_t(rState.mnFillOpacity)
-            ^  size_t(rState.mnOpacity)
-            ^  size_t(rState.meStrokeType)
-            ^  size_t(rState.mnStrokeOpacity)
-            ^  size_t(rState.meViewportFillType)
-            ^  size_t(rState.mnViewportFillOpacity)
-            ^  size_t(rState.maFillColor.a)
-            ^  size_t(rState.maFillColor.r)
-            ^  size_t(rState.maFillColor.g)
-            ^  size_t(rState.maFillColor.b)
-            ^  size_t(rState.maFillGradient.maStops.size())
-            ^  size_t(rState.meFillRule)
-            ^  size_t(rState.maStrokeColor.a)
-            ^  size_t(rState.maStrokeColor.r)
-            ^  size_t(rState.maStrokeColor.g)
-            ^  size_t(rState.maStrokeColor.b)
-            ^  size_t(rState.maStrokeGradient.maStops.size())
-            ^  size_t(rState.maDashArray.size())
-            ^  size_t(rState.mnDashOffset)
-            ^  size_t(rState.meLineCap)
-            ^  size_t(rState.meLineJoin)
-            ^  size_t(rState.mnMiterLimit)
-            ^  size_t(rState.mnStrokeWidth)
-            ^  size_t(rState.maViewportFillColor.a)
-            ^  size_t(rState.maViewportFillColor.r)
-            ^  size_t(rState.maViewportFillColor.g)
-            ^  size_t(rState.maViewportFillColor.b)
-            ^  size_t(rState.maViewportFillGradient.maStops.size());
-    }
-};
+        std::size_t operator()(const svgi::State& rState ) const
+        {
+            return std::hash<double>()(rState.maCTM.get( 0, 0 ))
+                ^  std::hash<double>()(rState.maCTM.get( 1, 0 ))
+                ^  std::hash<double>()(rState.maCTM.get( 0, 1 ))
+                ^  std::hash<double>()(rState.maCTM.get( 1, 1 ))
+                ^  std::hash<double>()(rState.maCTM.get( 0, 2 ))
+                ^  std::hash<double>()(rState.maCTM.get( 1, 2 ))
+                ^  std::hash<double>()(rState.maViewport.getWidth())
+                ^  std::hash<double>()(rState.maViewport.getHeight())
+                ^  std::hash<double>()(rState.maViewBox.getWidth())
+                ^  std::hash<double>()(rState.maViewBox.getHeight())
+                ^  size_t(rState.mbIsText)
+                ^  size_t(rState.maFontFamily.hashCode())
+                ^  std::hash<double>()(rState.mnFontSize)
+                ^  size_t(rState.maFontStyle.hashCode())
+                ^  size_t(rState.maFontVariant.hashCode())
+                ^  std::hash<double>()(rState.mnFontWeight)
+                ^  size_t(rState.meTextAnchor)
+                ^  size_t(rState.meTextDisplayAlign)
+                ^  std::hash<double>()(rState.mnTextLineIncrement)
+                ^  size_t(rState.mbVisibility)
+                ^  size_t(rState.meFillType)
+                ^  std::hash<double>()(rState.mnFillOpacity)
+                ^  std::hash<double>()(rState.mnOpacity)
+                ^  size_t(rState.meStrokeType)
+                ^  std::hash<double>()(rState.mnStrokeOpacity)
+                ^  size_t(rState.meViewportFillType)
+                ^  std::hash<double>()(rState.mnViewportFillOpacity)
+                ^  size_t(rState.maFillColor.a)
+                ^  size_t(rState.maFillColor.r)
+                ^  size_t(rState.maFillColor.g)
+                ^  size_t(rState.maFillColor.b)
+                ^  size_t(rState.maFillGradient.maStops.size())
+                ^  size_t(rState.meFillRule)
+                ^  size_t(rState.maStrokeColor.a)
+                ^  size_t(rState.maStrokeColor.r)
+                ^  size_t(rState.maStrokeColor.g)
+                ^  size_t(rState.maStrokeColor.b)
+                ^  size_t(rState.maStrokeGradient.maStops.size())
+                ^  size_t(rState.maDashArray.size())
+                ^  std::hash<double>()(rState.mnDashOffset)
+                ^  size_t(rState.meLineCap)
+                ^  size_t(rState.meLineJoin)
+                ^  std::hash<double>()(rState.mnMiterLimit)
+                ^  std::hash<double>()(rState.mnStrokeWidth)
+                ^  size_t(rState.maViewportFillColor.a)
+                ^  size_t(rState.maViewportFillColor.r)
+                ^  size_t(rState.maViewportFillColor.g)
+                ^  size_t(rState.maViewportFillColor.b)
+                ^  size_t(rState.maViewportFillGradient.maStops.size());
+        }
+    };
+}
 
-typedef std::unordered_set<State, StateHash> StatePool;
+namespace svgi
+{
+typedef std::unordered_set<State> StatePool;
 typedef std::unordered_map<sal_Int32, State> StateMap;
-
 } // namespace svgi
 
 #endif


More information about the Libreoffice-commits mailing list