diff options
author | Moonhee Choi <mh0310.choi@samsung.com> | 2017-02-17 15:41:50 +0900 |
---|---|---|
committer | Moonhee Choi <mh0310.choi@samsung.com> | 2017-02-17 15:41:50 +0900 |
commit | cd9fdda459c1758d08a607c4deda5435be5cf13e (patch) | |
tree | 44d3faa9b8b3d2b20bc3d2520fc7860c153a2e09 /src | |
parent | b53aa063fed63dcc990f96e3c010a0afe6348b27 (diff) | |
download | cairo-cd9fdda459c1758d08a607c4deda5435be5cf13e.tar.gz cairo-cd9fdda459c1758d08a607c4deda5435be5cf13e.tar.bz2 cairo-cd9fdda459c1758d08a607c4deda5435be5cf13e.zip |
[Revet] cairo-pdf-surface.csubmit/tizen_3.0/20170217.065240accepted/tizen/3.0/wearable/20170220.013145accepted/tizen/3.0/tv/20170220.013128accepted/tizen/3.0/mobile/20170220.013111accepted/tizen/3.0/ivi/20170220.013158accepted/tizen/3.0/common/20170220.125850
- Since the potential issue (ex, double freed) was founded, revert the previous version
Change-Id: If43aff6d8619bad8e6ee78997060a55b2be2b67e
Diffstat (limited to 'src')
-rwxr-xr-x | src/cairo-pdf-surface.c | 130 |
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; |