123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- --- freetype-2.3.11/src/psaux/t1decode.c 2009-09-29 19:51:31.000000000 +0200
- +++ freetype-2.3.11/src/psaux/t1decode.c 2011-07-20 14:39:24.000000000 +0200
- @@ -4,7 +4,7 @@
- /* */
- /* PostScript Type 1 decoding routines (body). */
- /* */
- -/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by */
- +/* Copyright 2000-2011 by */
- /* David Turner, Robert Wilhelm, and Werner Lemberg. */
- /* */
- /* This file is part of the FreeType project, and may only be used, */
- @@ -27,6 +27,8 @@
-
- #include "psauxerr.h"
-
- +/* ensure proper sign extension */
- +#define Fix2Int( f ) ( (FT_Int)(FT_Short)( (f) >> 16 ) )
-
- /*************************************************************************/
- /* */
- @@ -665,7 +667,7 @@
- if ( large_int )
- FT_TRACE4(( " %ld", value ));
- else
- - FT_TRACE4(( " %ld", (FT_Int32)( value >> 16 ) ));
- + FT_TRACE4(( " %ld", Fix2Int( value ) ));
- #endif
-
- *top++ = value;
- @@ -687,8 +689,8 @@
-
- top -= 2;
-
- - subr_no = (FT_Int)( top[1] >> 16 );
- - arg_cnt = (FT_Int)( top[0] >> 16 );
- + subr_no = Fix2Int( top[1] );
- + arg_cnt = Fix2Int( top[0] );
-
- /***********************************************************/
- /* */
- @@ -861,7 +863,7 @@
- if ( arg_cnt != 1 || blend == NULL )
- goto Unexpected_OtherSubr;
-
- - idx = (FT_Int)( top[0] >> 16 );
- + idx = Fix2Int( top[0] );
-
- if ( idx < 0 ||
- idx + blend->num_designs > decoder->len_buildchar )
- @@ -929,7 +931,7 @@
- if ( arg_cnt != 2 || blend == NULL )
- goto Unexpected_OtherSubr;
-
- - idx = (FT_Int)( top[1] >> 16 );
- + idx = Fix2Int( top[1] );
-
- if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
- goto Unexpected_OtherSubr;
- @@ -950,7 +952,7 @@
- if ( arg_cnt != 1 || blend == NULL )
- goto Unexpected_OtherSubr;
-
- - idx = (FT_Int)( top[0] >> 16 );
- + idx = Fix2Int( top[0] );
-
- if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
- goto Unexpected_OtherSubr;
- @@ -1008,11 +1010,15 @@
- break;
-
- default:
- - FT_ERROR(( "t1_decoder_parse_charstrings:"
- - " unknown othersubr [%d %d], wish me luck\n",
- - arg_cnt, subr_no ));
- - unknown_othersubr_result_cnt = arg_cnt;
- - break;
- + if ( arg_cnt >= 0 && subr_no >= 0 )
- + {
- + FT_ERROR(( "t1_decoder_parse_charstrings:"
- + " unknown othersubr [%d %d], wish me luck\n",
- + arg_cnt, subr_no ));
- + unknown_othersubr_result_cnt = arg_cnt;
- + break;
- + }
- + /* fall through */
-
- Unexpected_OtherSubr:
- FT_ERROR(( "t1_decoder_parse_charstrings:"
- @@ -1138,8 +1144,8 @@
- top[0],
- top[1],
- top[2],
- - (FT_Int)( top[3] >> 16 ),
- - (FT_Int)( top[4] >> 16 ) );
- + Fix2Int( top[3] ),
- + Fix2Int( top[4] ) );
-
- case op_sbw:
- FT_TRACE4(( " sbw" ));
- @@ -1313,7 +1319,7 @@
-
- FT_TRACE4(( " callsubr" ));
-
- - idx = (FT_Int)( top[0] >> 16 );
- + idx = Fix2Int( top[0] );
- if ( idx < 0 || idx >= (FT_Int)decoder->num_subrs )
- {
- FT_ERROR(( "t1_decoder_parse_charstrings:"
|