From 8ea31415f46167826ea3eac47c56ad60488f3ef7 Mon Sep 17 00:00:00 2001 From: Ken Sharp Date: Fri, 8 Jan 2010 18:13:02 +0100 Subject: [PATCH] Fix Savannah bug #28521. Issue #28226 involved a work-around for a font which used the `setcurrentpoint' operator in an invalid way; this operator is only supposed to be used with the result of OtherSubrs, and the font used it directly. The supplied patch removed the block of code which checked this usage entirely. This turns out to be a Bad Thing. If `setcurrentpoint' is being used correctly it should reset the flex flag in the decoder. If we don't do this then the flag never gets reset and we omit any further contours from the glyph (at least until we close the path or similar). * src/psaux/t1decode.c (t1_decoder_parse_charstrings) : Handle `flex_state' correctly. --- ChangeLog | 22 ++++++++++++++++++++++ src/psaux/t1decode.c | 4 ++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87725214b..1d4ba8e2f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2010-01-08 Ken Sharp + + Fix Savannah bug #28521. + + Issue #28226 involved a work-around for a font which used the + `setcurrentpoint' operator in an invalid way; this operator is only + supposed to be used with the result of OtherSubrs, and the font used + it directly. The supplied patch removed the block of code which + checked this usage entirely. + + This turns out to be a Bad Thing. If `setcurrentpoint' is being + used correctly it should reset the flex flag in the decoder. If we + don't do this then the flag never gets reset and we omit any further + contours from the glyph (at least until we close the path or + similar). + + * src/psaux/t1decode.c (t1_decoder_parse_charstrings) + : Handle `flex_state' correctly. + 2010-01-05 Werner Lemberg Apply reports from clang static analyzer. @@ -134,6 +153,9 @@ initial point to (0,0). Unnecessarily so, as they correctly use an `hsbw' operation which implicitly sets the initial point. + * src/psaux/t1decode.c (t1_decoder_parse_charstrings) + : Comment out code. + 2009-12-14 Bram Tassyns Fix parsing of /CIDFontVersion. diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c index 2b535b090..31554ff1b 100644 --- a/src/psaux/t1decode.c +++ b/src/psaux/t1decode.c @@ -1459,7 +1459,6 @@ case op_setcurrentpoint: FT_TRACE4(( " setcurrentpoint" )); -#if 0 /* From the T1 specification, section 6.4: */ /* */ /* The setcurrentpoint command is used only in */ @@ -1472,6 +1471,7 @@ /* Distiller handle this situation by silently ignoring */ /* the inappropriate `setcurrentpoint' instruction. So */ /* we do the same. */ +#if 0 if ( decoder->flex_state != 1 ) { @@ -1480,8 +1480,8 @@ goto Syntax_Error; } else - decoder->flex_state = 0; #endif + decoder->flex_state = 0; break; case op_unknown15: