| Index: third_party/freetype/src/cff/cf2intrp.c
|
| diff --git a/third_party/freetype/src/cff/cf2intrp.c b/third_party/freetype/src/cff/cf2intrp.c
|
| index a26960669f171114357d8694f664568b8d4fcea2..ff3fa9aaaabe33c32bb05428d049359651a0ee77 100644
|
| --- a/third_party/freetype/src/cff/cf2intrp.c
|
| +++ b/third_party/freetype/src/cff/cf2intrp.c
|
| @@ -43,6 +43,7 @@
|
| #include "cf2font.h"
|
| #include "cf2stack.h"
|
| #include "cf2hints.h"
|
| +#include "cf2intrp.h"
|
|
|
| #include "cf2error.h"
|
|
|
| @@ -760,16 +761,19 @@
|
|
|
| /* push our current CFF charstring region on subrStack */
|
| charstring = (CF2_Buffer)
|
| - cf2_arrstack_getPointer( &subrStack,
|
| - charstringIndex + 1 );
|
| + cf2_arrstack_getPointer(
|
| + &subrStack,
|
| + (size_t)charstringIndex + 1 );
|
|
|
| /* set up the new CFF region and pointer */
|
| - subrIndex = cf2_stack_popInt( opStack );
|
| + subrIndex = (CF2_UInt)cf2_stack_popInt( opStack );
|
|
|
| switch ( op1 )
|
| {
|
| case cf2_cmdCALLGSUBR:
|
| - FT_TRACE4(( "(%d)\n", subrIndex + decoder->globals_bias ));
|
| + FT_TRACE4(( " (idx %d, entering level %d)\n",
|
| + subrIndex + (CF2_UInt)decoder->globals_bias,
|
| + charstringIndex + 1 ));
|
|
|
| if ( cf2_initGlobalRegionBuffer( decoder,
|
| subrIndex,
|
| @@ -782,7 +786,9 @@
|
|
|
| default:
|
| /* cf2_cmdCALLSUBR */
|
| - FT_TRACE4(( "(%d)\n", subrIndex + decoder->locals_bias ));
|
| + FT_TRACE4(( " (idx %d, entering level %d)\n",
|
| + subrIndex + (CF2_UInt)decoder->locals_bias,
|
| + charstringIndex + 1 ));
|
|
|
| if ( cf2_initLocalRegionBuffer( decoder,
|
| subrIndex,
|
| @@ -798,7 +804,7 @@
|
| continue; /* do not clear the stack */
|
|
|
| case cf2_cmdRETURN:
|
| - FT_TRACE4(( " return\n" ));
|
| + FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
|
|
|
| if ( charstringIndex < 1 )
|
| {
|
| @@ -809,8 +815,9 @@
|
|
|
| /* restore position in previous charstring */
|
| charstring = (CF2_Buffer)
|
| - cf2_arrstack_getPointer( &subrStack,
|
| - --charstringIndex );
|
| + cf2_arrstack_getPointer(
|
| + &subrStack,
|
| + (CF2_UInt)--charstringIndex );
|
| continue; /* do not clear the stack */
|
|
|
| case cf2_cmdESC:
|
| @@ -1088,8 +1095,8 @@
|
| /* must be either 4 or 5 -- */
|
| /* this is a (deprecated) implied `seac' operator */
|
|
|
| - CF2_UInt achar;
|
| - CF2_UInt bchar;
|
| + CF2_Int achar;
|
| + CF2_Int bchar;
|
| CF2_BufferRec component;
|
| CF2_Fixed dummyWidth; /* ignore component width */
|
| FT_Error error2;
|
| @@ -1291,10 +1298,16 @@
|
|
|
| case cf2_cmdVVCURVETO:
|
| {
|
| - CF2_UInt count = cf2_stack_count( opStack );
|
| + CF2_UInt count, count1 = cf2_stack_count( opStack );
|
| CF2_UInt index = 0;
|
|
|
|
|
| + /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
|
| + /* we enforce it by clearing the second bit */
|
| + /* (and sorting the stack indexing to suit) */
|
| + count = count1 & ~2U;
|
| + index += count1 - count;
|
| +
|
| FT_TRACE4(( " vvcurveto\n" ));
|
|
|
| while ( index < count )
|
| @@ -1330,10 +1343,16 @@
|
|
|
| case cf2_cmdHHCURVETO:
|
| {
|
| - CF2_UInt count = cf2_stack_count( opStack );
|
| + CF2_UInt count, count1 = cf2_stack_count( opStack );
|
| CF2_UInt index = 0;
|
|
|
|
|
| + /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
|
| + /* we enforce it by clearing the second bit */
|
| + /* (and sorting the stack indexing to suit) */
|
| + count = count1 & ~2U;
|
| + index += count1 - count;
|
| +
|
| FT_TRACE4(( " hhcurveto\n" ));
|
|
|
| while ( index < count )
|
| @@ -1370,12 +1389,19 @@
|
| case cf2_cmdVHCURVETO:
|
| case cf2_cmdHVCURVETO:
|
| {
|
| - CF2_UInt count = cf2_stack_count( opStack );
|
| + CF2_UInt count, count1 = cf2_stack_count( opStack );
|
| CF2_UInt index = 0;
|
|
|
| FT_Bool alternate = op1 == cf2_cmdHVCURVETO;
|
|
|
|
|
| + /* if `cf2_stack_count' isn't of the form 8n, 8n+1, */
|
| + /* 8n+4, or 8n+5, we enforce it by clearing the */
|
| + /* second bit */
|
| + /* (and sorting the stack indexing to suit) */
|
| + count = count1 & ~2U;
|
| + index += count1 - count;
|
| +
|
| FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
|
|
|
| while ( index < count )
|
|
|