diff options
author | Oliver Chang <ochang@chromium.org> | 2015-11-05 16:00:40 -0800 |
---|---|---|
committer | Oliver Chang <ochang@chromium.org> | 2015-11-05 16:00:40 -0800 |
commit | cec3f6878e37fcd1c6c15e0e2ab011931d55549e (patch) | |
tree | fb3a01b9b966e59f8851ea4438243b1813a951e7 /third_party/freetype/src/cff/cf2intrp.c | |
parent | cca5b7684f48e2e933bf08ed573f7caca8e1d1ad (diff) | |
download | pdfium-cec3f6878e37fcd1c6c15e0e2ab011931d55549e.tar.xz |
Merge to XFA: Update bundled freetype to 2.6.1
Also adds a README.pdfium and 0000-include.patch that
details the local modifications made.
Also rolls testing/corpus to 45f88c6914fcac26ad930bb0ebbfa468c21db0a5
which includes regenerated corpus expectations.
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/1413673003 .
(cherry picked from commit 87ee069d05ca06f60d6cfacd9e426739d8f2053d)
Review URL: https://codereview.chromium.org/1416993005 .
Diffstat (limited to 'third_party/freetype/src/cff/cf2intrp.c')
-rw-r--r-- | third_party/freetype/src/cff/cf2intrp.c | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/third_party/freetype/src/cff/cf2intrp.c b/third_party/freetype/src/cff/cf2intrp.c index a26960669f..ff3fa9aaaa 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 ) |