summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoonhee Choi <mh0310.choi@samsung.com>2017-02-17 15:41:50 +0900
committerMoonhee Choi <mh0310.choi@samsung.com>2017-02-17 15:41:50 +0900
commitcd9fdda459c1758d08a607c4deda5435be5cf13e (patch)
tree44d3faa9b8b3d2b20bc3d2520fc7860c153a2e09
parentb53aa063fed63dcc990f96e3c010a0afe6348b27 (diff)
downloadcairo-accepted/tizen/3.0/wearable/20170220.013145.tar.gz
cairo-accepted/tizen/3.0/wearable/20170220.013145.tar.bz2
cairo-accepted/tizen/3.0/wearable/20170220.013145.zip
- Since the potential issue (ex, double freed) was founded, revert the previous version Change-Id: If43aff6d8619bad8e6ee78997060a55b2be2b67e
-rwxr-xr-xsrc/cairo-pdf-surface.c130
1 files changed, 57 insertions, 73 deletions
diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c
index 525923113..1fe6c87e4 100755
--- a/src/cairo-pdf-surface.c
+++ b/src/cairo-pdf-surface.c
@@ -6100,10 +6100,8 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t *surface,
}
status = _cairo_pdf_surface_add_smask (surface, gstate_res);
- if (unlikely (status)){
- free(smask_group);
+ if (unlikely (status))
return status;
- }
status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res);
if (unlikely (status))
@@ -6176,16 +6174,12 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t *surface,
}
status = _cairo_pdf_surface_add_smask (surface, gstate_res);
- if (unlikely (status)){
- free(smask_group);
+ if (unlikely (status))
return status;
- }
status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res);
- if (unlikely (status)){
- free(smask_group);
+ if (unlikely (status))
return status;
- }
_cairo_output_stream_printf (surface->output,
"q /s%d gs /x%d Do Q\n",
@@ -7039,22 +7033,22 @@ _cairo_pdf_surface_paint (void *abstract_surface,
status = _cairo_pattern_create_copy (&group->source, source);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
group->source_res = pattern_res;
status = _cairo_pdf_surface_add_smask_group (surface, group);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pdf_surface_add_smask (surface, gstate_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_add_xobject (surface, group->group_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
_cairo_output_stream_printf (surface->output,
"q /s%d gs /x%d Do Q\n",
@@ -7064,7 +7058,7 @@ _cairo_pdf_surface_paint (void *abstract_surface,
status = _cairo_pdf_surface_select_pattern (surface, source,
pattern_res, FALSE);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
_cairo_output_stream_printf (surface->output,
"0 0 %f %f re f\n",
@@ -7072,16 +7066,14 @@ _cairo_pdf_surface_paint (void *abstract_surface,
status = _cairo_pdf_surface_unselect_pattern (surface);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
}
- status = _cairo_output_stream_get_status (surface->output);
+ _cairo_composite_rectangles_fini (&extents);
+ return _cairo_output_stream_get_status (surface->output);
-cleanup_all:
- free (group);
cleanup:
_cairo_composite_rectangles_fini (&extents);
-
return status;
}
@@ -7184,47 +7176,46 @@ _cairo_pdf_surface_mask (void *abstract_surface,
status = _cairo_pattern_create_copy (&group->source, source);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pattern_create_copy (&group->mask, mask);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
group->source_res = _cairo_pdf_surface_new_object (surface);
if (group->source_res.id == 0) {
_cairo_pdf_smask_group_destroy (group);
status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pdf_surface_add_smask_group (surface, group);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pdf_surface_add_smask (surface, group->group_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_add_xobject (surface, group->source_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_operators_flush (&surface->pdf_operators);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
_cairo_output_stream_printf (surface->output,
"q /s%d gs /x%d Do Q\n",
group->group_res.id,
group->source_res.id);
- status = _cairo_output_stream_get_status (surface->output);
+ _cairo_composite_rectangles_fini (&extents);
+ return _cairo_output_stream_get_status (surface->output);
-cleanup_all:
- free (group);
cleanup:
_cairo_composite_rectangles_fini (&extents);
return status;
@@ -7309,13 +7300,13 @@ _cairo_pdf_surface_stroke (void *abstract_surface,
status = _cairo_pattern_create_copy (&group->source, source);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
group->source_res = pattern_res;
status = _cairo_path_fixed_init_copy (&group->path, path);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
group->style = *style;
@@ -7324,20 +7315,20 @@ _cairo_pdf_surface_stroke (void *abstract_surface,
status = _cairo_pdf_surface_add_smask_group (surface, group);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pdf_surface_add_smask (surface, gstate_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_add_xobject (surface, group->group_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_operators_flush (&surface->pdf_operators);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
_cairo_output_stream_printf (surface->output,
"q /s%d gs /x%d Do Q\n",
@@ -7346,7 +7337,7 @@ _cairo_pdf_surface_stroke (void *abstract_surface,
} else {
status = _cairo_pdf_surface_select_pattern (surface, source, pattern_res, TRUE);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_operators_stroke (&surface->pdf_operators,
path,
@@ -7354,17 +7345,16 @@ _cairo_pdf_surface_stroke (void *abstract_surface,
ctm,
ctm_inverse);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_unselect_pattern (surface);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
}
- status = _cairo_output_stream_get_status (surface->output);
+ _cairo_composite_rectangles_fini (&extents);
+ return _cairo_output_stream_get_status (surface->output);
-cleanup_all:
- free (group);
cleanup:
_cairo_composite_rectangles_fini (&extents);
return status;
@@ -7473,33 +7463,33 @@ _cairo_pdf_surface_fill (void *abstract_surface,
status = _cairo_pattern_create_copy (&group->source, source);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
group->source_res = pattern_res;
status = _cairo_path_fixed_init_copy (&group->path, path);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
group->fill_rule = fill_rule;
status = _cairo_pdf_surface_add_smask_group (surface, group);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pdf_surface_add_smask (surface, gstate_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_add_xobject (surface, group->group_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_operators_flush (&surface->pdf_operators);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
_cairo_output_stream_printf (surface->output,
"q /s%d gs /x%d Do Q\n",
@@ -7508,23 +7498,22 @@ _cairo_pdf_surface_fill (void *abstract_surface,
} else {
status = _cairo_pdf_surface_select_pattern (surface, source, pattern_res, FALSE);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_operators_fill (&surface->pdf_operators,
path,
fill_rule);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_unselect_pattern (surface);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
}
- status = _cairo_output_stream_get_status (surface->output);
+ _cairo_composite_rectangles_fini (&extents);
+ return _cairo_output_stream_get_status (surface->output);
-cleanup_all:
- free (group);
cleanup:
_cairo_composite_rectangles_fini (&extents);
return status;
@@ -7758,7 +7747,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
status = _cairo_pattern_create_copy (&group->source, source);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_group;
+ goto cleanup;
}
group->source_res = pattern_res;
@@ -7767,7 +7756,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
if (unlikely (group->utf8 == NULL)) {
_cairo_pdf_smask_group_destroy (group);
status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
- goto cleanup_group;
+ goto cleanup;
}
memcpy (group->utf8, utf8, utf8_len);
}
@@ -7778,7 +7767,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
if (unlikely (group->glyphs == NULL)) {
_cairo_pdf_smask_group_destroy (group);
status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
- goto cleanup_utf8;
+ goto cleanup;
}
memcpy (group->glyphs, glyphs, sizeof (cairo_glyph_t) * num_glyphs);
}
@@ -7789,7 +7778,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
if (unlikely (group->clusters == NULL)) {
_cairo_pdf_smask_group_destroy (group);
status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
- goto cleanup_glyphs;
+ goto cleanup;
}
memcpy (group->clusters, clusters, sizeof (cairo_text_cluster_t) * num_clusters);
}
@@ -7799,20 +7788,20 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
status = _cairo_pdf_surface_add_smask_group (surface, group);
if (unlikely (status)) {
_cairo_pdf_smask_group_destroy (group);
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pdf_surface_add_smask (surface, gstate_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_add_xobject (surface, group->group_res);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_operators_flush (&surface->pdf_operators);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
_cairo_output_stream_printf (surface->output,
"q /s%d gs /x%d Do Q\n",
@@ -7821,7 +7810,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
} else {
status = _cairo_pdf_surface_select_pattern (surface, source, pattern_res, FALSE);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
/* Each call to show_glyphs() with a transclucent pattern must
* be in a separate text object otherwise overlapping text
@@ -7830,7 +7819,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
if (! _cairo_pattern_is_opaque (source, &extents.bounded)) {
status = _cairo_pdf_operators_flush (&surface->pdf_operators);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
}
status = _cairo_pdf_operators_show_text_glyphs (&surface->pdf_operators,
@@ -7840,21 +7829,16 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface,
cluster_flags,
scaled_font);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
status = _cairo_pdf_surface_unselect_pattern (surface);
if (unlikely (status))
- goto cleanup_all;
+ goto cleanup;
}
-cleanup_all:
- free(group->clusters);
-cleanup_glyphs:
- free(group->glyphs);
-cleanup_utf8:
- free(group->utf8);
-cleanup_group:
- free(group);
+ _cairo_composite_rectangles_fini (&extents);
+ return _cairo_output_stream_get_status (surface->output);
+
cleanup:
_cairo_composite_rectangles_fini (&extents);
return status;