Commit 24370d67f59a81b4fbc802a8a2abe3ae3e8b0c8b

Werner Lemberg 2009-06-28T02:11:51

Uff, another thinko.

diff --git a/ChangeLog b/ChangeLog
index df11d1b..ffa116e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,9 +5,8 @@
 	* include/freetype/internal/psaux.h (T1_Decoder), src/cff/cffgload.h
 	(CFF_Decoder): Add `seac' boolean variable.
 
-	* src/cff/cffgload.c (cff_operator_seac,
-	cff_decoder_parse_charstrings), src/psaux/t1decode.c
-	(t1operator_seac, t1_decoder_parse_charstrings): Use it.
+	* src/cff/cffgload.c (cff_operator_seac), src/psaux/t1decode.c
+	(t1operator_seac): Use it.
 
 2009-06-28  Werner Lemberg  <wl@gnu.org>
 
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
index 2a982f4..7074160 100644
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -783,8 +783,11 @@
                                 &charstring, &charstring_len );
     if ( !error )
     {
+      /* the seac operator must not be nested */
+      decoder->seac = TRUE;
       error = cff_decoder_parse_charstrings( decoder, charstring,
                                              charstring_len );
+      decoder->seac = FALSE;
 
       if ( error )
         goto Exit;
@@ -809,8 +812,11 @@
                                 &charstring, &charstring_len );
     if ( !error )
     {
+      /* the seac operator must not be nested */
+      decoder->seac = TRUE;
       error = cff_decoder_parse_charstrings( decoder, charstring,
                                              charstring_len );
+      decoder->seac = FALSE;
 
       if ( error )
         goto Exit;
@@ -1889,14 +1895,11 @@
             FT_Pos  glyph_width = decoder->glyph_width;
 
 
-            /* the seac operator must not be nested */
-            decoder->seac = TRUE;
             error = cff_operator_seac( decoder,
                                        args[-4],
                                        args[-3],
                                        (FT_Int)( args[-2] >> 16 ),
                                        (FT_Int)( args[-1] >> 16 ) );
-            decoder->seac = FALSE;
 
             decoder->glyph_width = glyph_width;
           }
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
index 39b5c8b..adb0c6f 100644
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -282,7 +282,10 @@
 
     FT_GlyphLoader_Prepare( decoder->builder.loader );  /* prepare loader */
 
+    /* the seac operator must not be nested */
+    decoder->seac = TRUE;
     error = t1_decoder_parse_glyph( decoder, bchar_index );
+    decoder->seac = FALSE;
     if ( error )
       goto Exit;
 
@@ -300,7 +303,11 @@
 
     /* Now load `achar' on top of */
     /* the base outline           */
+
+    /* the seac operator must not be nested */
+    decoder->seac = TRUE;
     error = t1_decoder_parse_glyph( decoder, achar_index );
+    decoder->seac = FALSE;
     if ( error )
       goto Exit;
 
@@ -1125,18 +1132,12 @@
           break;
 
         case op_seac:
-          /* the seac operator must not be nested */
-          decoder->seac = TRUE;
-          error = t1operator_seac( decoder,
-                                   top[0],
-                                   top[1],
-                                   top[2],
-                                   (FT_Int)( top[3] >> 16 ),
-                                   (FT_Int)( top[4] >> 16 ) );
-          decoder->seac = FALSE;
-
-          /* return immediately after the processing */
-          return error;
+          return t1operator_seac( decoder,
+                                  top[0],
+                                  top[1],
+                                  top[2],
+                                  (FT_Int)( top[3] >> 16 ),
+                                  (FT_Int)( top[4] >> 16 ) );
 
         case op_sbw:
           FT_TRACE4(( " sbw" ));