shithub: freetype+ttf2subf

Download patch

ref: 0708b23e808eefb16a3a46abd738c040381fa0e3
parent: 76accc184bda4a417001e5fde08dcd670b4a95d5
author: Werner Lemberg <[email protected]>
date: Wed Oct 17 17:38:19 EDT 2012

[psaux] Fix some value overflows.

* src/psaux/psconv.c (PS_Conv_ToFixed): Implement it.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-17  Werner Lemberg  <[email protected]>
+
+	[psaux] Fix some value overflows.
+
+	* src/psaux/psconv.c (PS_Conv_ToFixed): Implement it.
+
 2012-10-17  Bram Tassyns  <[email protected]>
 
 	[cff] Fix value overflow.
--- a/src/psaux/psconv.c
+++ b/src/psaux/psconv.c
@@ -163,7 +163,14 @@
     }
 
     if ( *p != '.' )
-      integral = PS_Conv_ToInt( &p, limit ) << 16;
+    {
+      integral = PS_Conv_ToInt( &p, limit );
+
+      if ( integral > 0x7FFF )
+        return sign ? -0x7FFFFFFFL : 0x7FFFFFFFL;
+
+      integral <<= 16;
+    }
     else
       integral = 0;
 
@@ -210,6 +217,8 @@
 
     while ( power_ten > 0 )
     {
+      if ( integral >= 0xCCCCCCCL )
+        return sign ? -0x7FFFFFFFL : 0x7FFFFFFFL;
       integral *= 10;
       decimal  *= 10;
       power_ten--;
@@ -223,7 +232,12 @@
     }
 
     if ( decimal )
-      integral += FT_DivFix( decimal, divider );
+    {
+      decimal = FT_DivFix( decimal, divider );
+      if ( 0x7FFFFFFFL - decimal < integral )
+        return sign ? -0x7FFFFFFFL : 0x7FFFFFFFL;
+      integral += decimal;
+    }
 
     if ( sign )
       integral = -integral;