diff options
| author | Werner Lemberg <wl@gnu.org> | 2010-06-12 01:32:20 +0200 |
|---|---|---|
| committer | Werner Lemberg <wl@gnu.org> | 2010-06-12 01:32:20 +0200 |
| commit | 8d22746c9e5af80ff4304aef440986403a5072e2 (patch) | |
| tree | e37094285aada83b70bac40db9ee39cf28d31cf7 | |
| parent | 3624110cc25c1da42a151fcca6fe501854dd23ef (diff) | |
| download | freetype2-8d22746c9e5af80ff4304aef440986403a5072e2.tar.gz | |
Fix Savannah bug #30106.
Point numbers for FreeType's implementation of hinting masks are
collected before the final number of points of a glyph has been
determined; in particular, the code for handling the `endchar'
opcode can reduce the number of points.
* src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Assure that
`end_point' is not larger than `glyph->num_points'.
| -rw-r--r-- | ChangeLog | 12 | ||||
| -rw-r--r-- | src/pshinter/pshalgo.c | 12 |
2 files changed, 21 insertions, 3 deletions
@@ -1,5 +1,17 @@ 2010-06-11 Werner Lemberg <wl@gnu.org> + Fix Savannah bug #30106. + + Point numbers for FreeType's implementation of hinting masks are + collected before the final number of points of a glyph has been + determined; in particular, the code for handling the `endchar' + opcode can reduce the number of points. + + * src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Assure that + `end_point' is not larger than `glyph->num_points'. + +2010-06-11 Werner Lemberg <wl@gnu.org> + [cff]: Improve debugging output. * src/cff/cffgload.c (cff_decoder_parse_charstrings) diff --git a/src/pshinter/pshalgo.c b/src/pshinter/pshalgo.c index 417dcee..4b08785 100644 --- a/src/pshinter/pshalgo.c +++ b/src/pshinter/pshalgo.c @@ -4,7 +4,8 @@ /* */ /* PostScript hinting algorithm (body). */ /* */ -/* Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by */ +/* Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 */ +/* by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used */ @@ -1690,7 +1691,10 @@ /* process secondary hints to `selected' points */ if ( num_masks > 1 && glyph->num_points > 0 ) { - first = mask->end_point; + /* the `endchar' op can reduce the number of points */ + first = mask->end_point > glyph->num_points + ? glyph->num_points + : mask->end_point; mask++; for ( ; num_masks > 1; num_masks--, mask++ ) { @@ -1698,7 +1702,9 @@ FT_Int count; - next = mask->end_point; + next = mask->end_point > glyph->num_points + ? glyph->num_points + : mask->end_point; count = next - first; if ( count > 0 ) { |
