summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/pdf/pdf-clean-file.c3
-rw-r--r--source/pdf/pdf-device.c4
-rw-r--r--source/pdf/pdf-write.c69
-rw-r--r--source/pdf/pdf-xobject.c42
-rw-r--r--source/tools/pdfposter.c9
5 files changed, 54 insertions, 73 deletions
diff --git a/source/pdf/pdf-clean-file.c b/source/pdf/pdf-clean-file.c
index af0d6857..05f5a7fc 100644
--- a/source/pdf/pdf-clean-file.c
+++ b/source/pdf/pdf-clean-file.c
@@ -281,9 +281,8 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv)
if (dest_is_valid_page(ctx, dest, page_object_nums, pagecount))
{
pdf_obj *key_str = pdf_new_string(ctx, doc, pdf_to_name(ctx, key), strlen(pdf_to_name(ctx, key)));
- pdf_array_push(ctx, names_list, key_str);
+ pdf_array_push_drop(ctx, names_list, key_str);
pdf_array_push(ctx, names_list, val);
- pdf_drop_obj(ctx, key_str);
}
}
diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c
index 7ac9c7ca..6831f788 100644
--- a/source/pdf/pdf-device.c
+++ b/source/pdf/pdf-device.c
@@ -358,7 +358,7 @@ pdf_dev_add_font_res(fz_context *ctx, pdf_device *pdev, fz_font *font)
/* Not there so add to resources */
fz_snprintf(text, sizeof(text), "Font/F%d", pdev->num_cid_fonts);
- pdf_dict_putp(ctx, pdev->resources, text, fres);
+ pdf_dict_putp_drop(ctx, pdev->resources, text, fres);
/* And add index to our list for this page */
if (pdev->num_cid_fonts == pdev->max_cid_fonts)
@@ -909,7 +909,7 @@ pdf_dev_begin_mask(fz_context *ctx, fz_device *dev, const fz_rect *bbox, int lum
pdf_dict_put(ctx, smask, PDF_NAME_G, form_ref);
color_obj = pdf_new_array(ctx, doc, colorspace->n);
for (i = 0; i < colorspace->n; i++)
- pdf_array_push(ctx, color_obj, pdf_new_real(ctx, doc, color[i]));
+ pdf_array_push_drop(ctx, color_obj, pdf_new_real(ctx, doc, color[i]));
pdf_dict_put_drop(ctx, smask, PDF_NAME_BC, color_obj);
color_obj = NULL;
diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c
index 243e83eb..388a5820 100644
--- a/source/pdf/pdf-write.c
+++ b/source/pdf/pdf-write.c
@@ -1138,14 +1138,13 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_state *opts
pdf_obj *params_ref = NULL;
pdf_obj *hint_obj = NULL;
pdf_obj *hint_ref = NULL;
- pdf_obj *o = NULL;
+ pdf_obj *o;
int params_num, hint_num;
fz_var(params_obj);
fz_var(params_ref);
fz_var(hint_obj);
fz_var(hint_ref);
- fz_var(o);
fz_try(ctx)
{
@@ -1164,11 +1163,10 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_state *opts
pdf_dict_put(ctx, params_obj, PDF_NAME_L, opts->linear_l);
opts->linear_h0 = pdf_new_int(ctx, doc, INT_MIN);
o = pdf_new_array(ctx, doc, 2);
+ pdf_dict_put_drop(ctx, params_obj, PDF_NAME_H, o);
pdf_array_push(ctx, o, opts->linear_h0);
opts->linear_h1 = pdf_new_int(ctx, doc, INT_MIN);
pdf_array_push(ctx, o, opts->linear_h1);
- pdf_dict_put_drop(ctx, params_obj, PDF_NAME_H, o);
- o = NULL;
opts->linear_o = pdf_new_int(ctx, doc, INT_MIN);
pdf_dict_put(ctx, params_obj, PDF_NAME_O, opts->linear_o);
opts->linear_e = pdf_new_int(ctx, doc, INT_MIN);
@@ -1210,7 +1208,6 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_state *opts
pdf_drop_obj(ctx, params_ref);
pdf_drop_obj(ctx, hint_ref);
pdf_drop_obj(ctx, hint_obj);
- pdf_drop_obj(ctx, o);
}
fz_catch(ctx)
{
@@ -1242,7 +1239,7 @@ lpr_inherit_res_contents(fz_context *ctx, pdf_obj *res, pdf_obj *dict, pdf_obj *
else
o = NULL;
if (o)
- pdf_dict_put(ctx, res, text, o);
+ pdf_dict_put_drop(ctx, res, text, o);
return;
}
@@ -1567,44 +1564,52 @@ static fz_buffer *hexbuf(fz_context *ctx, unsigned char *p, int n)
static void addhexfilter(fz_context *ctx, pdf_document *doc, pdf_obj *dict)
{
pdf_obj *f, *dp, *newf, *newdp;
- pdf_obj *nullobj;
- nullobj = pdf_new_null(ctx, doc);
newf = newdp = NULL;
-
f = pdf_dict_get(ctx, dict, PDF_NAME_Filter);
dp = pdf_dict_get(ctx, dict, PDF_NAME_DecodeParms);
- if (pdf_is_name(ctx, f))
+ fz_var(newf);
+ fz_var(newdp);
+
+ fz_try(ctx)
{
- newf = pdf_new_array(ctx, doc, 2);
- pdf_array_push(ctx, newf, PDF_NAME_ASCIIHexDecode);
- pdf_array_push(ctx, newf, f);
- f = newf;
- if (pdf_is_dict(ctx, dp))
+ if (pdf_is_name(ctx, f))
+ {
+ newf = pdf_new_array(ctx, doc, 2);
+ pdf_array_push(ctx, newf, PDF_NAME_ASCIIHexDecode);
+ pdf_array_push(ctx, newf, f);
+ f = newf;
+ if (pdf_is_dict(ctx, dp))
+ {
+ newdp = pdf_new_array(ctx, doc, 2);
+ pdf_array_push_drop(ctx, newdp, pdf_new_null(ctx, doc));
+ pdf_array_push(ctx, newdp, dp);
+ dp = newdp;
+ }
+ }
+ else if (pdf_is_array(ctx, f))
{
- newdp = pdf_new_array(ctx, doc, 2);
- pdf_array_push(ctx, newdp, nullobj);
- pdf_array_push(ctx, newdp, dp);
- dp = newdp;
+ pdf_array_insert(ctx, f, PDF_NAME_ASCIIHexDecode, 0);
+ if (pdf_is_array(ctx, dp))
+ pdf_array_insert_drop(ctx, dp, pdf_new_null(ctx, doc), 0);
}
+ else
+ f = PDF_NAME_ASCIIHexDecode;
+
+ pdf_dict_put(ctx, dict, PDF_NAME_Filter, f);
+ if (dp)
+ pdf_dict_put(ctx, dict, PDF_NAME_DecodeParms, dp);
+
}
- else if (pdf_is_array(ctx, f))
+ fz_always(ctx)
{
- pdf_array_insert(ctx, f, PDF_NAME_ASCIIHexDecode, 0);
- if (pdf_is_array(ctx, dp))
- pdf_array_insert(ctx, dp, nullobj, 0);
+ pdf_drop_obj(ctx, newf);
+ pdf_drop_obj(ctx, newdp);
}
- else
- f = PDF_NAME_ASCIIHexDecode;
-
- pdf_dict_put(ctx, dict, PDF_NAME_Filter, f);
- if (dp)
- pdf_dict_put(ctx, dict, PDF_NAME_DecodeParms, dp);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
- pdf_drop_obj(ctx, nullobj);
- pdf_drop_obj(ctx, newf);
- pdf_drop_obj(ctx, newdp);
}
static fz_buffer *deflatebuf(fz_context *ctx, unsigned char *p, int n)
diff --git a/source/pdf/pdf-xobject.c b/source/pdf/pdf-xobject.c
index fa765a5d..95680ed5 100644
--- a/source/pdf/pdf-xobject.c
+++ b/source/pdf/pdf-xobject.c
@@ -121,51 +121,31 @@ pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const f
pdf_obj *idict = NULL;
pdf_obj *dict = NULL;
pdf_xobject *form = NULL;
- pdf_obj *obj = NULL;
pdf_obj *res = NULL;
- pdf_obj *procset = NULL;
+ pdf_obj *procset;
fz_var(idict);
fz_var(dict);
fz_var(form);
- fz_var(obj);
fz_var(res);
- fz_var(procset);
+
fz_try(ctx)
{
dict = pdf_new_dict(ctx, doc, 0);
-
- obj = pdf_new_rect(ctx, doc, bbox);
- pdf_dict_put(ctx, dict, PDF_NAME_BBox, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
-
- obj = pdf_new_int(ctx, doc, 1);
- pdf_dict_put(ctx, dict, PDF_NAME_FormType, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
-
- obj = pdf_new_int(ctx, doc, 0);
- pdf_dict_put(ctx, dict, PDF_NAME_Length, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
-
- obj = pdf_new_matrix(ctx, doc, mat);
- pdf_dict_put(ctx, dict, PDF_NAME_Matrix, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_dict_put_drop(ctx, dict, PDF_NAME_BBox, pdf_new_rect(ctx, doc, bbox));
+ pdf_dict_put_drop(ctx, dict, PDF_NAME_FormType, pdf_new_int(ctx, doc, 1));
+ pdf_dict_put_drop(ctx, dict, PDF_NAME_Length, pdf_new_int(ctx, doc, 0));
+ pdf_dict_put_drop(ctx, dict, PDF_NAME_Matrix, pdf_new_matrix(ctx, doc, mat));
res = pdf_new_dict(ctx, doc, 0);
+ pdf_dict_put(ctx, dict, PDF_NAME_Resources, res);
+
procset = pdf_new_array(ctx, doc, 2);
+ pdf_dict_put_drop(ctx, res, PDF_NAME_ProcSet, procset);
pdf_array_push(ctx, procset, PDF_NAME_PDF);
pdf_array_push(ctx, procset, PDF_NAME_Text);
- pdf_dict_put(ctx, res, PDF_NAME_ProcSet, procset);
- pdf_drop_obj(ctx, procset);
- procset = NULL;
- pdf_dict_put(ctx, dict, PDF_NAME_Resources, res);
pdf_dict_put(ctx, dict, PDF_NAME_Subtype, PDF_NAME_Form);
-
pdf_dict_put(ctx, dict, PDF_NAME_Type, PDF_NAME_XObject);
form = fz_malloc_struct(ctx, pdf_xobject);
@@ -204,13 +184,11 @@ pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const f
}
fz_catch(ctx)
{
- pdf_drop_obj(ctx, procset);
pdf_drop_obj(ctx, res);
- pdf_drop_obj(ctx, obj);
pdf_drop_obj(ctx, dict);
pdf_drop_obj(ctx, idict);
pdf_drop_xobject(ctx, form);
- fz_rethrow_message(ctx, "failed to create xobject)");
+ fz_rethrow_message(ctx, "failed to create xobject");
}
return idict;
diff --git a/source/tools/pdfposter.c b/source/tools/pdfposter.c
index 0393f137..92735386 100644
--- a/source/tools/pdfposter.c
+++ b/source/tools/pdfposter.c
@@ -46,7 +46,7 @@ intersect_box(fz_context *ctx, pdf_document *doc, pdf_obj *page, pdf_obj *box_na
pdf_array_push(ctx, newbox, pdf_new_real(ctx, doc, old_rect.y0));
pdf_array_push(ctx, newbox, pdf_new_real(ctx, doc, old_rect.x1));
pdf_array_push(ctx, newbox, pdf_new_real(ctx, doc, old_rect.y1));
- pdf_dict_put(ctx, page, box_name, newbox);
+ pdf_dict_put_drop(ctx, page, box_name, newbox);
}
/*
@@ -128,7 +128,7 @@ static void decimatepages(fz_context *ctx, pdf_document *doc)
pdf_array_push(ctx, newmediabox, pdf_new_real(ctx, doc, mb.y1));
pdf_dict_put(ctx, newpageobj, PDF_NAME_Parent, parent);
- pdf_dict_put(ctx, newpageobj, PDF_NAME_MediaBox, newmediabox);
+ pdf_dict_put_drop(ctx, newpageobj, PDF_NAME_MediaBox, newmediabox);
intersect_box(ctx, doc, newpageobj, PDF_NAME_CropBox, &mb);
intersect_box(ctx, doc, newpageobj, PDF_NAME_BleedBox, &mb);
@@ -146,9 +146,8 @@ static void decimatepages(fz_context *ctx, pdf_document *doc)
pdf_drop_obj(ctx, parent);
/* Update page count and kids array */
- pdf_dict_put(ctx, pages, PDF_NAME_Count, pdf_new_int(ctx, doc, kidcount));
- pdf_dict_put(ctx, pages, PDF_NAME_Kids, kids);
- pdf_drop_obj(ctx, kids);
+ pdf_dict_put_drop(ctx, pages, PDF_NAME_Count, pdf_new_int(ctx, doc, kidcount));
+ pdf_dict_put_drop(ctx, pages, PDF_NAME_Kids, kids);
}
int pdfposter_main(int argc, char **argv)