From 64691f1398152413f91ebe6906806eb9eb8801b1 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 21 Feb 2006 10:12:02 +0000 Subject: Change g_critical to g_warning. We already handle them gracefully. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2006-02-21 Behdad Esfahbod * 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. We already handle them gracefully. Bug 331994 – --disable-debug removes G_DISABLE_CAST_CHECKS Patch from charlet@act-europe.fr * configure.in: Do not lose PANGO_DEBUG_FLAGS when reassigning. Bug 331995 – pango_layout_set_text optimization Patch from charlet@act-europe.fr * pango/pango-layout.c: Do not validate input text if asserts are disabled. Moreover, do not truncate input text on invalid sequence. Bug 331996 – avoid crashes in win32 font handling Patch from charlet@act-europe.fr * pango/pangofc-fontmap.c, pango/pangowin32-fontmap.c, pango/pangowin32.c: if (!font) return NULL in a number of places. --- ChangeLog | 24 ++++++++++++++++++++++++ configure.in | 2 +- pango/fonts.c | 2 +- pango/glyphstring.c | 2 +- pango/pango-fontmap.c | 5 +++-- pango/pango-layout.c | 17 ++++++++++------- pango/pango-ot-buffer.c | 2 +- pango/pangoatsui-fontmap.c | 1 + pango/pangocairo-font.c | 2 +- pango/pangofc-fontmap.c | 9 +++------ pango/pangoft2.c | 2 +- pango/pangowin32-fontmap.c | 4 ++++ pango/pangowin32.c | 3 +++ pango/pangoxft-font.c | 2 +- pango/shape.c | 5 +++-- 15 files changed, 58 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0c26939b..185e4b2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +2006-02-21 Behdad Esfahbod + + * 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. + We already handle them gracefully. + + Bug 331994 – --disable-debug removes G_DISABLE_CAST_CHECKS + Patch from charlet@act-europe.fr + + * configure.in: Do not lose PANGO_DEBUG_FLAGS when reassigning. + + Bug 331995 – pango_layout_set_text optimization + Patch from charlet@act-europe.fr + + * pango/pango-layout.c: Do not validate input text if asserts are + disabled. Moreover, do not truncate input text on invalid sequence. + + Bug 331996 – avoid crashes in win32 font handling + Patch from charlet@act-europe.fr + + * pango/pangofc-fontmap.c, pango/pangowin32-fontmap.c, + pango/pangowin32.c: if (!font) return NULL in a number of places. + 2006-02-17 Behdad Esfahbod Bug 329148 – pango_glyph_item_split: assertion `split_index > 0' failed diff --git a/configure.in b/configure.in index 8927289f..ab3252e7 100644 --- a/configure.in +++ b/configure.in @@ -173,7 +173,7 @@ else PANGO_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS" if test "x$enable_debug" = "xno"; then - PANGO_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS" + PANGO_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS $PANGO_DEBUG_FLAGS" fi fi diff --git a/pango/fonts.c b/pango/fonts.c index 79d237e9..c9ae0555 100644 --- a/pango/fonts.c +++ b/pango/fonts.c @@ -1172,7 +1172,7 @@ pango_font_get_glyph_extents (PangoFont *font, if (!_pango_warning_history.get_glyph_extents) { _pango_warning_history.get_glyph_extents = TRUE; - g_critical ("pango_font_get_glyph_extents called with bad font, expect ugly output"); + g_warning ("pango_font_get_glyph_extents called with bad font, expect ugly output"); } if (ink_rect) { diff --git a/pango/glyphstring.c b/pango/glyphstring.c index fc677c3a..e28abbd0 100644 --- a/pango/glyphstring.c +++ b/pango/glyphstring.c @@ -67,7 +67,7 @@ pango_glyph_string_set_size (PangoGlyphString *string, gint new_len) if (string->space < 0) { - g_critical ("glyph string length overflows maximum integer size, truncated"); + g_warning ("glyph string length overflows maximum integer size, truncated"); new_len = string->space = G_MAXINT - 8; } } diff --git a/pango/pango-fontmap.c b/pango/pango-fontmap.c index 2d97a16b..409da2f9 100644 --- a/pango/pango-fontmap.c +++ b/pango/pango-fontmap.c @@ -236,10 +236,11 @@ pango_font_map_real_load_fontset (PangoFontMap *fontmap, pango_font_description_free (tmp_desc); - /* Everything failed, we are screwed, there is no way to continue + /* Everything failed, we are screwed, there is no way to continue, + * but lets just not crash here. */ if (pango_fontset_simple_size (fonts) == 0) - g_critical ("All font fallbacks failed!!!!"); + g_warning ("All font fallbacks failed!!!!"); return PANGO_FONTSET (fonts); } diff --git a/pango/pango-layout.c b/pango/pango-layout.c index f6e69edf..b7a0e3eb 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -819,7 +819,6 @@ pango_layout_set_text (PangoLayout *layout, const char *text, int length) { - const char *end; char *old_text; g_return_if_fail (layout != NULL); @@ -827,16 +826,20 @@ pango_layout_set_text (PangoLayout *layout, old_text = layout->text; + if (length < 0) + length = strlen (text); + +#ifndef G_DISABLE_ASSERT if (length != 0) { + const char *end; if (!g_utf8_validate (text, length, &end)) - g_warning ("Invalid UTF-8 string passed to pango_layout_set_text()"); - - while (end - text > G_MAXINT) - end = g_utf8_prev_char (end); - - length = end - text; + { + /* TODO: Write out the beginning excerpt of text? */ + g_warning ("Invalid UTF-8 string passed to pango_layout_set_text()"); + } } +#endif /* NULL-terminate the text for convenience. */ diff --git a/pango/pango-ot-buffer.c b/pango/pango-ot-buffer.c index 275cce6a..bfe10d37 100644 --- a/pango/pango-ot-buffer.c +++ b/pango/pango-ot-buffer.c @@ -50,7 +50,7 @@ pango_ot_buffer_new (PangoFcFont *font) FT_Face face = pango_fc_font_lock_face (font); if (otl_buffer_new (face->memory, &buffer->buffer) != FT_Err_Ok) - g_critical ("Allocation of OTLBuffer failed"); /* this doesn't happen */ + g_warning ("Allocation of OTLBuffer failed"); /* this doesn't happen */ buffer->font = g_object_ref (font); buffer->applied_gpos = FALSE; diff --git a/pango/pangoatsui-fontmap.c b/pango/pangoatsui-fontmap.c index e61637fc..340334a3 100644 --- a/pango/pangoatsui-fontmap.c +++ b/pango/pangoatsui-fontmap.c @@ -591,6 +591,7 @@ pango_atsui_font_map_load_font (PangoFontMap *fontmap, if (best_font) pango_atsui_font_map_add (atsuifontmap, context, best_font); + /* TODO: Handle the else case here. */ } pango_font_description_free (best_desc); diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c index ef03d68a..1e8112c4 100644 --- a/pango/pangocairo-font.c +++ b/pango/pangocairo-font.c @@ -78,7 +78,7 @@ _pango_cairo_font_install (PangoCairoFont *font, if (!_pango_cairo_warning_history.font_install) { _pango_cairo_warning_history.font_install = TRUE; - g_critical ("_pango_cairo_font_install called with bad font, expect ugly output"); + g_warning ("_pango_cairo_font_install called with bad font, expect ugly output"); cairo_set_font_face (cr, NULL); } return FALSE; diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index 8b395987..654edbe2 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -850,12 +850,6 @@ pango_fc_font_map_new_font (PangoFontMap *fontmap, PangoFcFont *fcfont; GSList *l; - /* Returning NULL here actually violates a contract - * that loading load_font() will never return NULL. - * We probably should actually create a dummy - * font that doesn't draw anything and has empty - * metrics. - */ if (priv->closed) return NULL; @@ -904,6 +898,9 @@ pango_fc_font_map_new_font (PangoFontMap *fontmap, FcPatternDestroy (pattern); } + if (!fcfont) + return NULL; + pango_fc_font_map_add (fcfontmap, context, fcfont); /* diff --git a/pango/pangoft2.c b/pango/pangoft2.c index 9c245d15..fa5a135f 100644 --- a/pango/pangoft2.c +++ b/pango/pangoft2.c @@ -178,7 +178,7 @@ pango_ft2_font_get_face (PangoFont *font) if (!_pango_ft2_warning_history.get_face) { _pango_ft2_warning_history.get_face = TRUE; - g_critical ("pango_ft2_font_get_face called with bad font, expect ugly output"); + g_warning ("pango_ft2_font_get_face called with bad font, expect ugly output"); } return NULL; } diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c index 1fd5be7b..8949a54a 100644 --- a/pango/pangowin32-fontmap.c +++ b/pango/pangowin32-fontmap.c @@ -447,6 +447,7 @@ pango_win32_font_map_load_font (PangoFontMap *fontmap, result = PANGO_WIN32_FONT_MAP_GET_CLASS (win32fontmap)->find_font (win32fontmap, context, best_match, description); + /* TODO: Handle the case that result == NULL. */ else PING(("no best match!")); } @@ -487,6 +488,9 @@ pango_win32_font_map_real_find_font (PangoWin32FontMap *win32fontmap, } win32font = pango_win32_font_new (fontmap, &face->logfont, size); + + if (!win32font) + return NULL; win32font->fontmap = fontmap; win32font->win32face = face; diff --git a/pango/pangowin32.c b/pango/pangowin32.c index 28e60718..2772700c 100644 --- a/pango/pangowin32.c +++ b/pango/pangowin32.c @@ -85,6 +85,9 @@ pango_win32_get_hfont (PangoFont *font) PangoWin32FontCache *cache; TEXTMETRIC tm; + if (!win32font) + return NULL; + if (!win32font->hfont) { cache = pango_win32_font_map_get_font_cache (win32font->fontmap); diff --git a/pango/pangoxft-font.c b/pango/pangoxft-font.c index 3df873b6..fe3844fb 100644 --- a/pango/pangoxft-font.c +++ b/pango/pangoxft-font.c @@ -473,7 +473,7 @@ pango_xft_font_get_font (PangoFont *font) if (!_pango_xft_warning_history.get_font) { _pango_xft_warning_history.get_font = TRUE; - g_critical ("pango_xft_font_get_font called with bad font, expect ugly output"); + g_warning ("pango_xft_font_get_font called with bad font, expect ugly output"); } return NULL; } diff --git a/pango/shape.c b/pango/shape.c index aa712192..50479b5e 100644 --- a/pango/shape.c +++ b/pango/shape.c @@ -73,6 +73,7 @@ pango_shape (const gchar *text, s = pango_font_description_to_string (desc); pango_font_description_free (desc); + /* TODO: Write out the beginning excerpt of text here? */ g_warning ("shape engine failure, expect ugly output. the offending font is '%s'", s); g_free (s); @@ -88,13 +89,13 @@ pango_shape (const gchar *text, !_pango_warning_history.shape_shape_engine) { _pango_warning_history.shape_shape_engine = TRUE; - g_critical ("pango_shape called with bad shape_engine, expect ugly output"); + g_warning ("pango_shape called with bad shape_engine, expect ugly output"); } if (!PANGO_IS_FONT (analysis->font) && !_pango_warning_history.shape_font) { _pango_warning_history.shape_font = TRUE; - g_critical ("pango_shape called with bad font, expect ugly output"); + g_warning ("pango_shape called with bad font, expect ugly output"); } glyphs->num_glyphs = 0; -- cgit v1.2.1