Package: libcairo
Version: 1.4.6-1.1
Severity: important
Tags: patch fixed-upstream upstream

        Hi,

 gnome-about is the source of one of the top crashers in GNOME upstream:
    <http://bugzilla.gnome.org/show_bug.cgi?id=431990>

 It seems this is fixed in cairo upstream with commit
 ab6a767cf476c98b466c62dd410d0f61f8dd6bbb which seems to be part of the
 next upstream release, 1.4.7.  Could you please either prepare the new
 upstream releases or apply the attached patch?

   Thanks,

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.22-rc4-686 (SMP w/2 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

-- 
Loïc Minier
diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c
index ad560cd..3787aeb 100644
--- a/src/cairo-gstate.c
+++ b/src/cairo-gstate.c
@@ -1464,10 +1464,11 @@ _cairo_gstate_ensure_scaled_font (cairo_gstate_t *gstate)
 						    &gstate->font_matrix,
 						    &gstate->ctm,
 						    &options);
+    if (gstate->scaled_font == NULL)
+	return CAIRO_STATUS_NO_MEMORY;
 
-    status = cairo_scaled_font_status (gstate->scaled_font);
-    if (status)
-	return status;
+    if (cairo_scaled_font_status (gstate->scaled_font))
+	return cairo_scaled_font_status (gstate->scaled_font);
 
     return CAIRO_STATUS_SUCCESS;
 }
diff --git a/src/cairo-scaled-font-subsets.c b/src/cairo-scaled-font-subsets.c
index 3489ee6..fa5a8b4 100644
--- a/src/cairo-scaled-font-subsets.c
+++ b/src/cairo-scaled-font-subsets.c
@@ -531,8 +531,6 @@ _cairo_scaled_font_subsets_map_glyph (cairo_scaled_font_subsets_t	*subsets,
                                                       &identity,
                                                       &identity,
                                                       &font_options);
-	    if (unscaled_font->status)
-		return unscaled_font->status;
 
             subset_glyph->is_scaled = FALSE;
             type1_font = FALSE;
diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c
index 40ff698..d6726b3 100644
--- a/src/cairo-scaled-font.c
+++ b/src/cairo-scaled-font.c
@@ -135,9 +135,6 @@ _cairo_scaled_font_set_error (cairo_scaled_font_t *scaled_font,
 cairo_font_type_t
 cairo_scaled_font_get_type (cairo_scaled_font_t *scaled_font)
 {
-    if (scaled_font->ref_count == CAIRO_REF_COUNT_INVALID)
-	return CAIRO_FONT_TYPE_TOY;
-
     return scaled_font->backend->type;
 }
 
@@ -773,13 +770,10 @@ cairo_scaled_font_text_extents (cairo_scaled_font_t   *scaled_font,
 				const char            *utf8,
 				cairo_text_extents_t  *extents)
 {
-    cairo_status_t status;
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
     cairo_glyph_t *glyphs;
     int num_glyphs;
 
-    if (scaled_font->status)
-	return;
-
     status = _cairo_scaled_font_text_to_glyphs (scaled_font, 0., 0., utf8, &glyphs, &num_glyphs);
     if (status) {
         _cairo_scaled_font_set_error (scaled_font, status);
@@ -813,7 +807,7 @@ cairo_scaled_font_glyph_extents (cairo_scaled_font_t   *scaled_font,
 				 int                    num_glyphs,
 				 cairo_text_extents_t  *extents)
 {
-    cairo_status_t status;
+    cairo_status_t status = CAIRO_STATUS_SUCCESS;
     int i;
     double min_x = 0.0, min_y = 0.0, max_x = 0.0, max_y = 0.0;
     cairo_bool_t visible = FALSE;
diff --git a/src/cairo-type1-fallback.c b/src/cairo-type1-fallback.c
index 3872777..3a0bd12 100644
--- a/src/cairo-type1-fallback.c
+++ b/src/cairo-type1-fallback.c
@@ -106,7 +106,7 @@ cairo_type1_font_create (cairo_scaled_font_subset_t  *scaled_font_subset,
 							&font_matrix,
 							&ctm,
 							&font_options);
-    if (font->type1_scaled_font->status)
+    if (font->type1_scaled_font == NULL)
         goto fail;
 
     _cairo_array_init (&font->contents, sizeof (unsigned char));

Reply via email to