Fix severe security issues
[external/pango1.0.git] / pango / pangofc-font.c
old mode 100755 (executable)
new mode 100644 (file)
index ad234be..b5a776c
@@ -479,6 +479,18 @@ get_face_metrics (PangoFcFont      *fcfont,
   PANGO_FC_FONT_UNLOCK_FACE (fcfont);
 }
 
+PangoFontMetrics *
+pango_fc_font_create_base_metrics_for_context (PangoFcFont   *fcfont,
+                                              PangoContext  *context)
+{
+  PangoFontMetrics *metrics;
+  metrics = pango_font_metrics_new ();
+
+  get_face_metrics (fcfont, metrics);
+
+  return metrics;
+}
+
 static int
 max_glyph_width (PangoLayout *layout)
 {
@@ -503,42 +515,6 @@ max_glyph_width (PangoLayout *layout)
   return max_width;
 }
 
-PangoFontMetrics *
-pango_fc_font_create_metrics_for_context (PangoFcFont   *fcfont,
-                                         PangoContext  *context)
-{
-  PangoFontMetrics *metrics;
-  PangoLayout *layout;
-  PangoRectangle extents;
-  PangoLanguage *language = pango_context_get_language (context);
-  const char *sample_str = pango_language_get_sample_string (language);
-  PangoFontDescription *desc = pango_font_describe_with_absolute_size (PANGO_FONT (fcfont));
-
-  metrics = pango_font_metrics_new ();
-
-  get_face_metrics (fcfont, metrics);
-
-  layout = pango_layout_new (context);
-  pango_layout_set_font_description (layout, desc);
-  pango_font_description_free (desc);
-
-  pango_layout_set_text (layout, sample_str, -1);
-  pango_layout_get_extents (layout, NULL, &extents);
-
-  metrics->approximate_char_width =
-    extents.width / pango_utf8_strwidth (sample_str);
-
-  pango_layout_set_text (layout, "0123456789", -1);
-  metrics->approximate_digit_width = max_glyph_width (layout);
-
-  g_object_unref (layout);
-
-  return metrics;
-}
-
-/* This function is cut-and-pasted into pangocairo-fcfont.c - it might be
- * better to add a virtual fcfont->create_context (font).
- */
 static PangoFontMetrics *
 pango_fc_font_get_metrics (PangoFont     *font,
                           PangoLanguage *language)
@@ -581,7 +557,28 @@ pango_fc_font_get_metrics (PangoFont     *font,
       context = pango_font_map_create_context (fontmap);
       pango_context_set_language (context, language);
 
-      info->metrics = pango_fc_font_create_metrics_for_context (fcfont, context);
+      info->metrics = pango_fc_font_create_base_metrics_for_context (fcfont, context);
+
+      { /* Compute derived metrics */
+       PangoLayout *layout;
+       PangoRectangle extents;
+       const char *sample_str = pango_language_get_sample_string (language);
+       PangoFontDescription *desc = pango_font_describe_with_absolute_size (font);
+
+        layout = pango_layout_new (context);
+       pango_layout_set_font_description (layout, desc);
+       pango_font_description_free (desc);
+
+       pango_layout_set_text (layout, sample_str, -1);
+       pango_layout_get_extents (layout, NULL, &extents);
+
+       info->metrics->approximate_char_width = extents.width / pango_utf8_strwidth (sample_str);
+
+       pango_layout_set_text (layout, "0123456789", -1);
+       info->metrics->approximate_digit_width = max_glyph_width (layout);
+
+       g_object_unref (layout);
+      }
 
       g_object_unref (context);
       g_object_unref (fontmap);
@@ -789,7 +786,7 @@ _pango_fc_font_shutdown (PangoFcFont *font)
 }
 
 /**
- * pango_fc_font_kern_glyphs
+ * pango_fc_font_kern_glyphs:
  * @font: a #PangoFcFont
  * @glyphs: a #PangoGlyphString
  *
@@ -862,7 +859,7 @@ pango_fc_font_kern_glyphs (PangoFcFont      *font,
 }
 
 /**
- * _pango_fc_font_get_decoder
+ * _pango_fc_font_get_decoder:
  * @font: a #PangoFcFont
  *
  * This will return any custom decoder set on this font.
@@ -881,7 +878,7 @@ _pango_fc_font_get_decoder (PangoFcFont *font)
 }
 
 /**
- * _pango_fc_font_set_decoder
+ * _pango_fc_font_set_decoder:
  * @font: a #PangoFcFont
  * @decoder: a #PangoFcDecoder to set for this font
  *