Bug 56566 - Memory leaks in font-related code
Summary: Memory leaks in font-related code
Alias: None
Product: cairo
Classification: Unclassified
Component: pdf backend (show other bugs)
Version: 1.12.6
Hardware: Other All
: medium major
Assignee: Adrian Johnson
QA Contact: cairo-bugs mailing list
Depends on:
Reported: 2012-10-30 04:42 UTC by Kevin Tardif
Modified: 2012-10-30 10:24 UTC (History)
0 users

See Also:
i915 platform:
i915 features:

The patch (1.97 KB, text/plain)
2012-10-30 04:42 UTC, Kevin Tardif
The test case (2.02 KB, text/plain)
2012-10-30 04:43 UTC, Kevin Tardif
PDF to trigger the leak (1.19 MB, text/plain)
2012-10-30 04:43 UTC, Kevin Tardif

Note You need to log in before you can comment on or make changes to this bug.
Description Kevin Tardif 2012-10-30 04:42:31 UTC
Created attachment 69279 [details]
The patch

I've located two memory leaks in the pdf backend.

In cairo-type1-subset.c, _cairo_type1_font_subset_fini doesn't free font->cleartext (set by cairo_type1_font_subset_decrypt_eexec_segment).

In cairo-cff-subset.c, _cairo_cff_font_create can exit without freeing font->font_name and/or font->data; _cairo_cff_font_load_opentype_cff is called to allocate font_name, then _cairo_cff_font_load_cff is called to allocate font->data, then _cairo_cff_font_load_cff's return status is checked and if it failed, it jumps to fail1. This can cause font_name to leak since the fail1 target only frees the font variable. In addition, _cairo_cff_font_load_cff can fail -after- allocating data, and then data won't be freed either.

I've attached a patch against the latest (5a6e1d) commit in the master repo and a test case with a pdf I found on the web that triggers it.
Comment 1 Kevin Tardif 2012-10-30 04:43:04 UTC
Created attachment 69280 [details]
The test case
Comment 2 Kevin Tardif 2012-10-30 04:43:28 UTC
Created attachment 69281 [details]
PDF to trigger the leak
Comment 3 Adrian Johnson 2012-10-30 10:24:53 UTC
Thanks for the patch and test case.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct.