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 /pango | |
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.
Diffstat (limited to 'pango')
-rw-r--r-- | pango/shape.c | 21 |
1 files changed, 13 insertions, 8 deletions
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[] |