diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-01-22 12:24:30 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-01-22 12:41:38 -0500 |
commit | 36f5dee473010a450ff49c1bc34bca9edd4ff539 (patch) | |
tree | ae70dfca8069678b5d61b7fa30db8943b5b9c67e /src/cairo-default-context.c | |
parent | 76aed3a5e32fac8b47d42eb040569277dfcc496d (diff) | |
download | cairo-36f5dee473010a450ff49c1bc34bca9edd4ff539.tar.gz |
Plug a memory leak in an error case
GTK has a testcase that tests the error when creating
an oversize image, and asan tells me that it triggers
a memory leak in cairo:
Direct leak of 160 byte(s) in 1 object(s) allocated from:
#0 0x7f1122755667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
#1 0x7f1120cc83e8 in _cairo_pattern_create_solid ../src/cairo-pattern.c:607
#2 0x7f1120cc8487 in _cairo_pattern_create_in_error ../src/cairo-pattern.c:630
#3 0x7f1120cc87cb in INT_cairo_pattern_create_for_surface ../src/cairo-pattern.c:736
#4 0x7f1120c1f1c7 in _cairo_default_context_set_source_surface ../src/cairo-default-context.c:327
#5 0x7f1120d8386a in INT_cairo_set_source_surface ../src/cairo.c:982
#6 0x7f1121d005a2 in gdk_cairo_set_source_pixbuf ../gdk/gdkcairo.c:234
#7 0x401427 in test_set_source_big_pixbuf ../testsuite/gdk/cairo.c:23
Diffstat (limited to 'src/cairo-default-context.c')
-rw-r--r-- | src/cairo-default-context.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/cairo-default-context.c b/src/cairo-default-context.c index 95b5f6b77..d2c9cae10 100644 --- a/src/cairo-default-context.c +++ b/src/cairo-default-context.c @@ -325,8 +325,11 @@ _cairo_default_context_set_source_surface (void *abstract_cr, _cairo_default_context_set_source (cr, (cairo_pattern_t *) &_cairo_pattern_black); pattern = cairo_pattern_create_for_surface (surface); - if (unlikely (pattern->status)) - return pattern->status; + if (unlikely (pattern->status)) { + status = pattern->status; + cairo_pattern_destroy (pattern); + return status; + } cairo_matrix_init_translate (&matrix, -x, -y); cairo_pattern_set_matrix (pattern, &matrix); |