diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2006-01-29 22:57:34 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2006-01-29 22:57:34 +0000 |
commit | 9d18a76a5d226de48eb41f0c2ba23d7e42195ff8 (patch) | |
tree | 54a634b0d699a3c7163639be2c19a62fb3161cdc | |
parent | 5b06b8379c5eba25be9f9057750a5bfe30f22ffe (diff) | |
download | pango-9d18a76a5d226de48eb41f0c2ba23d7e42195ff8.tar.gz |
Do not crash if the (win32 typically) shaper fails. Bug #304702:
2006-01-29 Behdad Esfahbod <behdad@gnome.org>
Do not crash if the (win32 typically) shaper fails. Bug #304702:
* pango/pango-engine.c (_pango_engine_shape_shape): Set num_glyphs to
zero if failing.
* pango/pango-shape.c (pango_shape): Instead of crashing if the shaper
failed to produce any glyphs, print out a warning message containing
the name of the font, and mark the font such that we don't keep
printing warning for the same font. Moreover, inject one whitespace
glyph per character, so you just see nothing, but everything works
otherwise.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | pango/shape.c | 21 |
2 files changed, 16 insertions, 9 deletions
@@ -8,7 +8,9 @@ * pango/pango-shape.c (pango_shape): Instead of crashing if the shaper failed to produce any glyphs, print out a warning message containing the name of the font, and mark the font such that we don't keep - printing warning for the same font. + printing warning for the same font. Moreover, inject one whitespace + glyph per character, so you just see nothing, but everything works + otherwise. 2006-01-28 Behdad Esfahbod <behdad@gnome.org> diff --git a/pango/shape.c b/pango/shape.c index 24902a47..03020153 100644 --- a/pango/shape.c +++ b/pango/shape.c @@ -85,15 +85,20 @@ pango_shape (const gchar *text, if (!glyphs->num_glyphs) { - pango_glyph_string_set_size (glyphs, 1); + /* If failed to get glyphs, put a whitespace glyph per character + */ + pango_glyph_string_set_size (glyphs, g_utf8_strlen (text, length)); - glyphs->glyphs[0].glyph = 0; - - glyphs->glyphs[0].geometry.x_offset = 0; - glyphs->glyphs[0].geometry.y_offset = 0; - glyphs->glyphs[0].geometry.width = 0; - - glyphs->log_clusters[0] = 0; + for (i = 0; i < glyphs->num_glyphs; i++) + { + glyphs->glyphs[i].glyph = 0; + + glyphs->glyphs[i].geometry.x_offset = 0; + glyphs->glyphs[i].geometry.y_offset = 0; + glyphs->glyphs[i].geometry.width = 10 * PANGO_SCALE; + + glyphs->log_clusters[i] = i; + } } /* Set glyphs[i].attr.is_cluster_start based on log_clusters[] |