shithub: freetype+ttf2subf

Download patch

ref: 8ea31415f46167826ea3eac47c56ad60488f3ef7
parent: 297dc2235a293f4e4b653ebd3cdd87105e8e4625
author: Ken Sharp <[email protected]>
date: Fri Jan 8 13:13:02 EST 2010

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)
<op_setcurrentpoint>: Handle `flex_state' correctly.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2010-01-08  Ken Sharp  <[email protected]>
+
+	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)
+	<op_setcurrentpoint>: Handle `flex_state' correctly.
+
 2010-01-05  Werner Lemberg  <[email protected]>
 
 	Apply reports from clang static analyzer.
@@ -133,6 +152,9 @@
 	the point after a `Subr' call, but these fonts use it to set the
 	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)
+	<op_setcurrentpoint>: Comment out code.
 
 2009-12-14  Bram Tassyns  <[email protected]>
 
--- 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: