Bug 331723 – shapers should not crash on failures
authorBehdad Esfahbod <behdad@gnome.org>
Tue, 21 Feb 2006 10:47:30 +0000 (10:47 +0000)
committerBehdad Esfahbod <behdad@src.gnome.org>
Tue, 21 Feb 2006 10:47:30 +0000 (10:47 +0000)
2006-02-21  Behdad Esfahbod  <behdad@gnome.org>

        Bug 331723 – shapers should not crash on failures

        * modules/*/*-fc.c: Return instead of g_return_if_fail when
        face == NULL.

        * pango/pango-engine.h (PangoEngineShape): Document that a shaper
        should return an empty glyph string on failure.

ChangeLog
modules/arabic/arabic-fc.c
modules/basic/basic-fc.c
modules/hebrew/hebrew-fc.c
modules/indic/indic-fc.c
modules/khmer/khmer-fc.c
modules/syriac/syriac-fc.c
modules/thai/thai-ot.c
modules/tibetan/tibetan-fc.c
pango/pango-engine.h

index 185e4b2..8b34e61 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2006-02-21  Behdad Esfahbod  <behdad@gnome.org>
 
+       Bug 331723 – shapers should not crash on failures
+
+       * modules/*/*-fc.c: Return instead of g_return_if_fail when
+       face == NULL.
+
+       * pango/pango-engine.h (PangoEngineShape): Document that a shaper
+       should return an empty glyph string on failure.
+
+2006-02-21  Behdad Esfahbod  <behdad@gnome.org>
+
        * pango/fonts.c, pango/glyphstring.c, pango/pango-fontmap.c,
        pango/pango-ot-buffer.c, pango/pangocairo-font.c, pango/pangoft2.c,
        pango/pangoxft-font.c, pango/shape.c: Change g_critical to g_warning.
index 0b3faef..e6fc5ef 100644 (file)
@@ -274,7 +274,8 @@ arabic_engine_shape (PangoEngineShape *engine,
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_if_fail (face != NULL);
+  if (!face)
+    return;
 
   ruleset = get_ruleset (face);
   if (!ruleset)
index dc77ef0..626608b 100644 (file)
@@ -344,7 +344,8 @@ basic_engine_shape (PangoEngineShape *engine,
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_if_fail (face != NULL);
+  if (!face)
+    return;
 
   ruleset = get_ruleset (face);
   if (!ruleset)
index dcb45b4..8b6ae03 100644 (file)
@@ -312,7 +312,8 @@ hebrew_engine_shape (PangoEngineShape *engine,
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_if_fail (face != NULL);
+  if (!face)
+    return;
 
   ruleset = get_ruleset (face);
   if (!ruleset)
index 3011a66..4947b5b 100644 (file)
@@ -344,7 +344,8 @@ indic_engine_shape (PangoEngineShape *engine,
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_if_fail (face != NULL);
+  if (!face)
+    return;
 
   indic_shape_engine = (IndicEngineFc *) engine;
 
index 9fd9bab..82541e4 100644 (file)
@@ -541,7 +541,8 @@ khmer_engine_shape (PangoEngineShape *engine,
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_if_fail (face != NULL);
+  if (!face)
+    return;
 
   buffer = pango_ot_buffer_new (fc_font);
 
index 1e10df3..dab11ef 100644 (file)
@@ -266,7 +266,8 @@ syriac_engine_shape (PangoEngineShape *engine,
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_if_fail (face != NULL);
+  if (!face)
+    return;
 
   ruleset = get_ruleset (face);
   if (!ruleset)
index 23c2019..00b0638 100644 (file)
@@ -76,7 +76,8 @@ thai_ot_get_ruleset (PangoFont *font)
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_val_if_fail (face != NULL, NULL);
+  if (!face)
+    return NULL;
 
   info = pango_ot_info_get (face);
   if (info != NULL)
@@ -148,7 +149,8 @@ lao_ot_get_ruleset (PangoFont *font)
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_val_if_fail (face != NULL, NULL);
+  if (!face)
+    return NULL;
 
   info = pango_ot_info_get (face);
   if (info != NULL)
index 1781edc..b4348c0 100644 (file)
@@ -506,7 +506,8 @@ tibetan_engine_shape (PangoEngineShape *engine,
 
   fc_font = PANGO_FC_FONT (font);
   face = pango_fc_font_lock_face (fc_font);
-  g_return_if_fail (face != NULL);
+  if (!face)
+    return;
 
   buffer = pango_ot_buffer_new (fc_font);
 
index ae101a1..11bb4a8 100644 (file)
@@ -163,7 +163,10 @@ struct _PangoEngineShape
  *   of the output logical clusters;
  *   if no rendering is desired for a character, this may involve
  *   inserting glyphs with the #PangoGlyph ID #PANGO_GLYPH_EMPTY, which
- *   is guaranteed never to render.
+ *   is guaranteed never to render. If the shaping fails for any reason,
+ *   the shaper should return with an empty (zero-size) glyph string.
+ *   If the shaper has not set the size on the glyph string yet, simply
+ *   returning signals the failure too.
  * @covers: Returns the characters that this engine can cover
  *   with a given font for a given language. If not overridden, the default
  *   implementation simply returns the coverage information for the