summaryrefslogtreecommitdiff
path: root/src/cairo-default-context.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-01-22 12:24:30 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-01-22 12:41:38 -0500
commit36f5dee473010a450ff49c1bc34bca9edd4ff539 (patch)
treeae70dfca8069678b5d61b7fa30db8943b5b9c67e /src/cairo-default-context.c
parent76aed3a5e32fac8b47d42eb040569277dfcc496d (diff)
downloadcairo-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.c7
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);