fixed two bugs related to T2 real numbers: the "skipping" code didn't behave correctly (leaving a bad stack ptr), and the actual parsing code also parsed the code (30) as two nibbles.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
diff --git a/src/cff/t2parse.c b/src/cff/t2parse.c
index fbc4f2b..a66e187 100644
--- a/src/cff/t2parse.c
+++ b/src/cff/t2parse.c
@@ -153,7 +153,7 @@
FT_Byte* limit,
FT_Int power_ten )
{
- FT_Byte* p = start;
+ FT_Byte* p = ++start;
FT_Long num, divider, result, exp;
FT_Int sign = 0, exp_sign = 0;
FT_Byte nib;
@@ -472,6 +472,7 @@
if ( v == 30 )
{
/* skip real number */
+ p++;
for (;;)
{
if ( p >= limit )
@@ -484,7 +485,6 @@
break;
p++;
}
- p++;
}
else if ( v == 28 )
p += 2;
@@ -526,7 +526,6 @@
FT_Long val;
FT_Byte* q = (FT_Byte*)parser->object + field->offset;
-
switch ( field->kind )
{
case t2_kind_bool: