summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emfio/source/reader/mtftools.cxx5
-rw-r--r--include/o3tl/safeint.hxx9
2 files changed, 12 insertions, 2 deletions
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index 349f686f4ea9..b6de61d1f6bc 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -514,8 +514,9 @@ namespace emfio
// must later be made portable in SV (KA 1996-02-08)
Size aFontSize = ImplMap (rFont.GetFontSize(), false);
- if( aFontSize.Height() < 0 )
- aFontSize.Height() *= -1;
+ const auto nHeight = aFontSize.Height();
+ if (nHeight < 0)
+ aFontSize.Height() = o3tl::saturating_toggle_sign(nHeight);
rFont.SetFontSize( aFontSize );
diff --git a/include/o3tl/safeint.hxx b/include/o3tl/safeint.hxx
index 47baccf067f8..56175edb3bbe 100644
--- a/include/o3tl/safeint.hxx
+++ b/include/o3tl/safeint.hxx
@@ -56,6 +56,15 @@ typename std::enable_if<std::is_unsigned<T>::value, T>::type saturating_add(
}
}
+template<typename T> inline
+typename std::enable_if<std::is_signed<T>::value, T>::type saturating_toggle_sign(
+ T a)
+{
+ if (a == std::numeric_limits<T>::min())
+ return std::numeric_limits<T>::max();
+ return a * -1;
+}
+
#if defined(_MSC_VER)
template<typename T> inline bool checked_multiply(T a, T b, T& result)