cairo.c (apply_options): Fix potential memory leak
authorJohn Darrington <john@darrington.wattle.id.au>
Sat, 14 Jul 2012 11:42:00 +0000 (13:42 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 14 Jul 2012 11:42:00 +0000 (13:42 +0200)
This function may be called more than once.  So we need to deallocte the old values before
creating new ones

src/output/cairo.c

index a98df2e6c18bc1d59a4cb4033879fec09b905242..da5740464e58c2c5a056d4be36c4c4d815375910 100644 (file)
@@ -249,9 +249,18 @@ apply_options (struct xr_driver *xr, struct string_map *o)
 {
   struct output_driver *d = &xr->driver;
 
-  int paper_width, paper_length;
+  int paper_width, paper_length, i;
 
   int font_points = parse_int (opt (d, o, "font-size", "10000"), 1000, 1000000);
+
+  for (i = 0; i < XR_N_FONTS; i++)
+    {
+      struct xr_font *font = &xr->fonts[i];
+
+      if (font->desc != NULL)
+        pango_font_description_free (font->desc);
+    }
+
   xr->fonts[XR_FONT_FIXED].desc = parse_font (d, o, "fixed-font", "monospace",
                                               font_points);
   xr->fonts[XR_FONT_PROPORTIONAL].desc = parse_font (d, o, "prop-font",