diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2017-12-19 23:47:47 +0100 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2017-12-19 23:56:48 +0100 |
commit | 321ba1de287016b0036bf4a56ce774ad11763384 (patch) | |
tree | 7e509fb43c5c86834eec07cc053cc3141d58003e | |
parent | 308c8d8ed6d2c15e45c33a8a6a748a1b06cb134c (diff) |
Bug 698825: Do not drop borrowed colorspaces.
Previously the borrowed colorspace was dropped when updating annotation
appearances, leading to use after free warnings from valgrind/ASAN.
-rw-r--r-- | source/pdf/pdf-appearance.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c index 70f684f4d..d7a1dddd8 100644 --- a/source/pdf/pdf-appearance.c +++ b/source/pdf/pdf-appearance.c | |||
@@ -2170,7 +2170,6 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p | |||
2170 | fz_device *dev = NULL; | 2170 | fz_device *dev = NULL; |
2171 | font_info font_rec; | 2171 | font_info font_rec; |
2172 | fz_text *text = NULL; | 2172 | fz_text *text = NULL; |
2173 | fz_colorspace *cs = NULL; | ||
2174 | fz_matrix page_ctm; | 2173 | fz_matrix page_ctm; |
2175 | 2174 | ||
2176 | pdf_page_transform(ctx, annot->page, NULL, &page_ctm); | 2175 | pdf_page_transform(ctx, annot->page, NULL, &page_ctm); |
@@ -2184,11 +2183,11 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p | |||
2184 | fz_var(dlist); | 2183 | fz_var(dlist); |
2185 | fz_var(dev); | 2184 | fz_var(dev); |
2186 | fz_var(text); | 2185 | fz_var(text); |
2187 | fz_var(cs); | ||
2188 | fz_try(ctx) | 2186 | fz_try(ctx) |
2189 | { | 2187 | { |
2190 | char *contents = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Contents)); | 2188 | char *contents = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Contents)); |
2191 | char *da = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_DA)); | 2189 | char *da = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_DA)); |
2190 | fz_colorspace *cs; | ||
2192 | fz_point pos; | 2191 | fz_point pos; |
2193 | fz_rect rect; | 2192 | fz_rect rect; |
2194 | 2193 | ||
@@ -2223,7 +2222,6 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p | |||
2223 | fz_drop_display_list(ctx, dlist); | 2222 | fz_drop_display_list(ctx, dlist); |
2224 | font_info_fin(ctx, &font_rec); | 2223 | font_info_fin(ctx, &font_rec); |
2225 | fz_drop_text(ctx, text); | 2224 | fz_drop_text(ctx, text); |
2226 | fz_drop_colorspace(ctx, cs); | ||
2227 | } | 2225 | } |
2228 | fz_catch(ctx) | 2226 | fz_catch(ctx) |
2229 | { | 2227 | { |
@@ -2359,7 +2357,6 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot | |||
2359 | fz_device *dev = NULL; | 2357 | fz_device *dev = NULL; |
2360 | font_info font_rec; | 2358 | font_info font_rec; |
2361 | fz_text *text = NULL; | 2359 | fz_text *text = NULL; |
2362 | fz_colorspace *cs = NULL; | ||
2363 | fz_path *path = NULL; | 2360 | fz_path *path = NULL; |
2364 | fz_buffer *fzbuf = NULL; | 2361 | fz_buffer *fzbuf = NULL; |
2365 | fz_matrix page_ctm; | 2362 | fz_matrix page_ctm; |
@@ -2375,7 +2372,6 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot | |||
2375 | fz_var(dlist); | 2372 | fz_var(dlist); |
2376 | fz_var(dev); | 2373 | fz_var(dev); |
2377 | fz_var(text); | 2374 | fz_var(text); |
2378 | fz_var(cs); | ||
2379 | fz_var(fzbuf); | 2375 | fz_var(fzbuf); |
2380 | fz_try(ctx) | 2376 | fz_try(ctx) |
2381 | { | 2377 | { |
@@ -2384,6 +2380,7 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot | |||
2384 | fz_rect logo_bounds; | 2380 | fz_rect logo_bounds; |
2385 | fz_matrix logo_tm; | 2381 | fz_matrix logo_tm; |
2386 | fz_rect rect; | 2382 | fz_rect rect; |
2383 | fz_colorspace *cs = fz_device_rgb(ctx); /* Borrowed reference */ | ||
2387 | 2384 | ||
2388 | pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_Rect), &annot_rect); | 2385 | pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_Rect), &annot_rect); |
2389 | rect = annot_rect; | 2386 | rect = annot_rect; |
@@ -2396,7 +2393,6 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot | |||
2396 | fz_bound_path(ctx, path, NULL, &fz_identity, &logo_bounds); | 2393 | fz_bound_path(ctx, path, NULL, &fz_identity, &logo_bounds); |
2397 | center_rect_within_rect(&logo_bounds, &rect, &logo_tm); | 2394 | center_rect_within_rect(&logo_bounds, &rect, &logo_tm); |
2398 | fz_concat(&logo_tm, &logo_tm, &page_ctm); | 2395 | fz_concat(&logo_tm, &logo_tm, &page_ctm); |
2399 | cs = fz_device_rgb(ctx); /* Borrowed reference */ | ||
2400 | fz_fill_path(ctx, dev, path, 0, &logo_tm, cs, logo_color, 1.0f, NULL); | 2396 | fz_fill_path(ctx, dev, path, 0, &logo_tm, cs, logo_color, 1.0f, NULL); |
2401 | 2397 | ||
2402 | get_font_info(ctx, doc, dr, da, &font_rec); | 2398 | get_font_info(ctx, doc, dr, da, &font_rec); |