diff options
author | Federico Mena Quintero <federico.mena@gmail.com> | 2018-08-29 00:38:34 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico.mena@gmail.com> | 2018-08-29 00:38:34 +0000 |
commit | 92984bbe691246d7fc830a90d1947909abc875fa (patch) | |
tree | 1a8517a02a22683026ca3f1ea4340f9c116f67af /librsvg | |
parent | 4ac653e8db0e590eefb864d21a72e1360ade8bd0 (diff) | |
download | librsvg-92984bbe691246d7fc830a90d1947909abc875fa.tar.gz |
Tree leak
Diffstat (limited to 'librsvg')
-rw-r--r-- | librsvg/rsvg-handle.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/librsvg/rsvg-handle.c b/librsvg/rsvg-handle.c index fe14a564..790b7e70 100644 --- a/librsvg/rsvg-handle.c +++ b/librsvg/rsvg-handle.c @@ -1166,9 +1166,11 @@ get_node_ink_rect(RsvgHandle *handle, RsvgNode *node, cairo_rectangle_t *ink_rec gboolean rsvg_handle_get_dimensions_sub (RsvgHandle * handle, RsvgDimensionData * dimension_data, const char *id) { + RsvgNode *root = NULL; RsvgNode *node; gboolean has_size; int root_width, root_height; + gboolean res = FALSE; g_return_val_if_fail (handle, FALSE); g_return_val_if_fail (dimension_data, FALSE); @@ -1178,27 +1180,31 @@ rsvg_handle_get_dimensions_sub (RsvgHandle * handle, RsvgDimensionData * dimensi if (handle->priv->tree == NULL) return FALSE; + root = rsvg_tree_get_root (handle->priv->tree); + if (id && *id) { node = rsvg_defs_lookup (handle->priv->defs, id); if (rsvg_tree_is_root (handle->priv->tree, node)) id = NULL; } else { - node = rsvg_tree_get_root (handle->priv->tree); + node = root; } - if (!node && id) - return FALSE; + if (!node && id) { + goto out; + } - has_size = rsvg_node_svg_get_size (rsvg_tree_get_root (handle->priv->tree), + has_size = rsvg_node_svg_get_size (root, handle->priv->dpi_x, handle->priv->dpi_y, &root_width, &root_height); if (id || !has_size) { cairo_rectangle_t ink_rect; - if (!get_node_ink_rect (handle, node, &ink_rect)) - return FALSE; + if (!get_node_ink_rect (handle, node, &ink_rect)) { + goto out; + } dimension_data->width = ink_rect.width; dimension_data->height = ink_rect.height; @@ -1214,7 +1220,13 @@ rsvg_handle_get_dimensions_sub (RsvgHandle * handle, RsvgDimensionData * dimensi (*handle->priv->size_func) (&dimension_data->width, &dimension_data->height, handle->priv->user_data); - return TRUE; + res = TRUE; + +out: + + g_clear_pointer (&root, rsvg_node_unref); + + return res; } /** |