[psaux] Fix some value overflows.

* src/psaux/psconv.c (PS_Conv_ToFixed): Implement it.
This commit is contained in:
Werner Lemberg 2012-10-17 21:38:19 +02:00
parent 76accc184b
commit 0708b23e80
2 changed files with 22 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2012-10-17 Werner Lemberg <wl@gnu.org>
[psaux] Fix some value overflows.
* src/psaux/psconv.c (PS_Conv_ToFixed): Implement it.
2012-10-17 Bram Tassyns <BramT@enfocus.com>
[cff] Fix value overflow.

View File

@ -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;