bnc704612_othersubr OBS-URL: https://build.opensuse.org/request/show/76760 OBS-URL: https://build.opensuse.org/package/show/M17N/freetype2?expand=0&rev=48
100 lines
3.4 KiB
Diff
100 lines
3.4 KiB
Diff
--- freetype-2.4.4/src/psaux/t1decode.c.orig 2011-07-21 16:44:40.000000000 +0000
|
|
+++ freetype-2.4.4/src/psaux/t1decode.c 2011-07-21 17:00:05.000000000 +0000
|
|
@@ -28,6 +28,8 @@
|
|
|
|
#include "psauxerr.h"
|
|
|
|
+/* ensure proper sign extension */
|
|
+#define Fix2Int( f ) ( (FT_Int)(FT_Short)( (f) >> 16 ) )
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
@@ -662,7 +664,7 @@
|
|
if ( large_int )
|
|
FT_TRACE4(( " %ld", value ));
|
|
else
|
|
- FT_TRACE4(( " %ld", (FT_Int32)( value >> 16 ) ));
|
|
+ FT_TRACE4(( " %ld", Fix2Int( value ) ));
|
|
#endif
|
|
|
|
*top++ = value;
|
|
@@ -684,8 +686,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] );
|
|
|
|
/***********************************************************/
|
|
/* */
|
|
@@ -862,7 +864,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 )
|
|
@@ -930,7 +932,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;
|
|
@@ -951,7 +953,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;
|
|
@@ -1009,11 +1011,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:"
|
|
@@ -1139,8 +1145,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" ));
|
|
@@ -1324,7 +1330,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:"
|