diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/pdf/pdf-annot-edit.c | 4 | ||||
-rw-r--r-- | source/pdf/pdf-annot.c | 4 | ||||
-rw-r--r-- | source/pdf/pdf-appearance.c | 4 | ||||
-rw-r--r-- | source/pdf/pdf-cmap-load.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-colorspace.c | 6 | ||||
-rw-r--r-- | source/pdf/pdf-crypt.c | 4 | ||||
-rw-r--r-- | source/pdf/pdf-field.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-font.c | 9 | ||||
-rw-r--r-- | source/pdf/pdf-form.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-function.c | 14 | ||||
-rw-r--r-- | source/pdf/pdf-graft.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-image.c | 9 | ||||
-rw-r--r-- | source/pdf/pdf-interpret.c | 5 | ||||
-rw-r--r-- | source/pdf/pdf-parse.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-repair.c | 22 | ||||
-rw-r--r-- | source/pdf/pdf-resources.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-shade.c | 14 | ||||
-rw-r--r-- | source/pdf/pdf-store.c | 7 | ||||
-rw-r--r-- | source/pdf/pdf-stream.c | 111 | ||||
-rw-r--r-- | source/pdf/pdf-type3.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-write.c | 41 | ||||
-rw-r--r-- | source/pdf/pdf-xref.c | 82 | ||||
-rw-r--r-- | source/tools/murun.c | 4 | ||||
-rw-r--r-- | source/tools/pdfextract.c | 4 | ||||
-rw-r--r-- | source/tools/pdfinfo.c | 72 | ||||
-rw-r--r-- | source/tools/pdfshow.c | 24 |
26 files changed, 208 insertions, 246 deletions
diff --git a/source/pdf/pdf-annot-edit.c b/source/pdf/pdf-annot-edit.c index 7cd344a4..e09a6129 100644 --- a/source/pdf/pdf-annot-edit.c +++ b/source/pdf/pdf-annot-edit.c @@ -54,9 +54,7 @@ pdf_update_annot(fz_context *ctx, pdf_document *doc, pdf_annot *annot) n = NULL; - if (hp->num == pdf_to_num(ctx, obj) - && hp->gen == pdf_to_gen(ctx, obj) - && (hp->state & HOTSPOT_POINTER_DOWN)) + if (hp->num == pdf_to_num(ctx, obj) && (hp->state & HOTSPOT_POINTER_DOWN)) { n = pdf_dict_get(ctx, ap, PDF_NAME_D); /* down state */ } diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c index efae4cd3..a81108dc 100644 --- a/source/pdf/pdf-annot.c +++ b/source/pdf/pdf-annot.c @@ -564,9 +564,7 @@ pdf_load_annots(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_obj *ann if (!keep_annot) break; - if (hp->num == pdf_to_num(ctx, obj) - && hp->gen == pdf_to_gen(ctx, obj) - && (hp->state & HOTSPOT_POINTER_DOWN)) + if (hp->num == pdf_to_num(ctx, obj) && (hp->state & HOTSPOT_POINTER_DOWN)) { n = pdf_dict_get(ctx, ap, PDF_NAME_D); /* down state */ } diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c index 8773ac05..029b131d 100644 --- a/source/pdf/pdf-appearance.c +++ b/source/pdf/pdf-appearance.c @@ -778,7 +778,7 @@ static int get_matrix(fz_context *ctx, pdf_document *doc, pdf_xobject *form, int pdf_lexbuf lbuf; fz_stream *str; - str = pdf_open_stream(ctx, doc, pdf_to_num(ctx, form->contents), pdf_to_gen(ctx, form->contents)); + str = pdf_open_stream(ctx, doc, pdf_to_num(ctx, form->contents)); pdf_lexbuf_init(ctx, &lbuf, PDF_LEXBUF_SMALL); @@ -1041,7 +1041,7 @@ static void update_marked_content(fz_context *ctx, pdf_document *doc, pdf_xobjec int first = 1; newbuf = fz_new_buffer(ctx, 0); - str_outer = pdf_open_stream(ctx, doc, pdf_to_num(ctx, form->contents), pdf_to_gen(ctx, form->contents)); + str_outer = pdf_open_stream(ctx, doc, pdf_to_num(ctx, form->contents)); len = fz_buffer_storage(ctx, fzbuf, &buf); str_inner = fz_open_memory(ctx, buf, len); diff --git a/source/pdf/pdf-cmap-load.c b/source/pdf/pdf-cmap-load.c index 06359242..58b3dae6 100644 --- a/source/pdf/pdf-cmap-load.c +++ b/source/pdf/pdf-cmap-load.c @@ -37,7 +37,7 @@ pdf_load_embedded_cmap(fz_context *ctx, pdf_document *doc, pdf_obj *stmobj) fz_try(ctx) { - file = pdf_open_stream(ctx, doc, pdf_to_num(ctx, stmobj), pdf_to_gen(ctx, stmobj)); + file = pdf_open_stream(ctx, doc, pdf_to_num(ctx, stmobj)); cmap = pdf_load_cmap(ctx, file); obj = pdf_dict_get(ctx, stmobj, PDF_NAME_WMode); diff --git a/source/pdf/pdf-colorspace.c b/source/pdf/pdf-colorspace.c index 8bec2707..081ceaaf 100644 --- a/source/pdf/pdf-colorspace.c +++ b/source/pdf/pdf-colorspace.c @@ -100,7 +100,7 @@ load_separation(fz_context *ctx, pdf_document *doc, pdf_obj *array) { tint = pdf_load_function(ctx, doc, tintobj, n, base->n); /* RJW: fz_drop_colorspace(ctx, base); - * "cannot load tint function (%d %d R)", pdf_to_num(ctx, tintobj), pdf_to_gen(ctx, tintobj) */ + * "cannot load tint function (%d 0 R)", pdf_to_num(ctx, tintobj) */ sep = fz_malloc_struct(ctx, struct separation); sep->base = base; @@ -168,7 +168,7 @@ load_indexed(fz_context *ctx, pdf_document *doc, pdf_obj *array) fz_try(ctx) { - file = pdf_open_stream(ctx, doc, pdf_to_num(ctx, lookupobj), pdf_to_gen(ctx, lookupobj)); + file = pdf_open_stream(ctx, doc, pdf_to_num(ctx, lookupobj)); i = (int)fz_read(ctx, file, lookup, n); if (i < n) memset(lookup+i, 0, n-i); @@ -303,7 +303,7 @@ pdf_load_colorspace_imp(fz_context *ctx, pdf_document *doc, pdf_obj *obj) } } - fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: could not parse color space (%d %d R)", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: could not parse color space (%d 0 R)", pdf_to_num(ctx, obj)); } fz_colorspace * diff --git a/source/pdf/pdf-crypt.c b/source/pdf/pdf-crypt.c index d9c34d7f..b17c2a71 100644 --- a/source/pdf/pdf-crypt.c +++ b/source/pdf/pdf-crypt.c @@ -290,7 +290,7 @@ pdf_parse_crypt_filter(fz_context *ctx, pdf_crypt_filter *cf, pdf_crypt *crypt, int is_stdcf = (!is_identity && pdf_name_eq(ctx, name, PDF_NAME_StdCF)); if (!is_identity && !is_stdcf) - fz_throw(ctx, FZ_ERROR_GENERIC, "Crypt Filter not Identity or StdCF (%d %d R)", pdf_to_num(ctx, crypt->cf), pdf_to_gen(ctx, crypt->cf)); + fz_throw(ctx, FZ_ERROR_GENERIC, "Crypt Filter not Identity or StdCF (%d 0 R)", pdf_to_num(ctx, crypt->cf)); cf->method = PDF_CRYPT_NONE; cf->length = crypt->length; @@ -324,7 +324,7 @@ pdf_parse_crypt_filter(fz_context *ctx, pdf_crypt_filter *cf, pdf_crypt *crypt, cf->length = pdf_to_int(ctx, obj); } else if (!is_identity) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot parse crypt filter (%d %d R)", pdf_to_num(ctx, crypt->cf), pdf_to_gen(ctx, crypt->cf)); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot parse crypt filter (%d 0 R)", pdf_to_num(ctx, crypt->cf)); /* the length for crypt filters is supposed to be in bytes not bits */ if (cf->length < 40) diff --git a/source/pdf/pdf-field.c b/source/pdf/pdf-field.c index 046e3428..53853ced 100644 --- a/source/pdf/pdf-field.c +++ b/source/pdf/pdf-field.c @@ -33,7 +33,7 @@ char *pdf_get_string_or_stream(fz_context *ctx, pdf_document *doc, pdf_obj *obj) } else if (pdf_is_stream(ctx, obj)) { - stmbuf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + stmbuf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, obj)); len = fz_buffer_storage(ctx, stmbuf, (unsigned char **)&buf); } diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c index 7e15a287..cc6c68ed 100644 --- a/source/pdf/pdf-font.c +++ b/source/pdf/pdf-font.c @@ -411,7 +411,7 @@ pdf_load_embedded_font(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontde { fz_buffer *buf; - buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, stmref), pdf_to_gen(ctx, stmref)); + buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, stmref)); fz_try(ctx) fontdesc->font = fz_new_font_from_buffer(ctx, fontname, buf, 0, 1); fz_always(ctx) @@ -867,9 +867,8 @@ pdf_load_simple_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict) static int hail_mary_make_hash_key(fz_context *ctx, fz_store_hash *hash, void *key_) { - hash->u.i.i0 = 0; - hash->u.i.i1 = 0; - hash->u.i.ptr = NULL; + hash->u.pi.i = 0; + hash->u.pi.ptr = NULL; return 1; } @@ -1021,7 +1020,7 @@ load_cid_font(fz_context *ctx, pdf_document *doc, pdf_obj *dict, pdf_obj *encodi fz_buffer *buf; size_t z; - buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, cidtogidmap), pdf_to_gen(ctx, cidtogidmap)); + buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, cidtogidmap)); fontdesc->cid_to_gid_len = (buf->len) / 2; fontdesc->cid_to_gid = fz_malloc_array(ctx, fontdesc->cid_to_gid_len, sizeof(unsigned short)); diff --git a/source/pdf/pdf-form.c b/source/pdf/pdf-form.c index 09b51d24..6889e07f 100644 --- a/source/pdf/pdf-form.c +++ b/source/pdf/pdf-form.c @@ -624,7 +624,6 @@ int pdf_pass_event(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_ui_ev doc->focus_obj = pdf_keep_obj(ctx, annot->obj); hp->num = pdf_to_num(ctx, annot->obj); - hp->gen = pdf_to_gen(ctx, annot->obj); hp->state = HOTSPOT_POINTER_DOWN; changed = 1; /* Execute the down and focus actions */ @@ -638,7 +637,6 @@ int pdf_pass_event(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_ui_ev changed = 1; hp->num = 0; - hp->gen = 0; hp->state = 0; if (annot) diff --git a/source/pdf/pdf-function.c b/source/pdf/pdf-function.c index 979e9ec9..6de7bfc0 100644 --- a/source/pdf/pdf-function.c +++ b/source/pdf/pdf-function.c @@ -833,7 +833,7 @@ parse_code(fz_context *ctx, pdf_function *func, fz_stream *stream, int *codeptr, } static void -load_postscript_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj *dict, int num, int gen) +load_postscript_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj *dict, int num) { fz_stream *stream = NULL; int codeptr; @@ -848,7 +848,7 @@ load_postscript_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf fz_try(ctx) { - stream = pdf_open_stream(ctx, doc, num, gen); + stream = pdf_open_stream(ctx, doc, num); tok = pdf_lex(ctx, stream, &buf); if (tok != PDF_TOK_OPEN_BRACE) @@ -906,7 +906,7 @@ eval_postscript_func(fz_context *ctx, pdf_function *func, const float *in, float #define MAX_SAMPLE_FUNCTION_SIZE (100 << 20) static void -load_sample_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj *dict, int num, int gen) +load_sample_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj *dict, int num) { fz_stream *stream; pdf_obj *obj; @@ -984,7 +984,7 @@ load_sample_func(fz_context *ctx, pdf_document *doc, pdf_function *func, pdf_obj func->u.sa.samples = fz_malloc_array(ctx, samplecount, sizeof(float)); func->base.size += samplecount * sizeof(float); - stream = pdf_open_stream(ctx, doc, num, gen); + stream = pdf_open_stream(ctx, doc, num); fz_try(ctx) { @@ -1661,7 +1661,7 @@ pdf_load_function(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int in, int switch (func->type) { case SAMPLE: - load_sample_func(ctx, doc, func, dict, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + load_sample_func(ctx, doc, func, dict, pdf_to_num(ctx, dict)); break; case EXPONENTIAL: @@ -1673,11 +1673,11 @@ pdf_load_function(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int in, int break; case POSTSCRIPT: - load_postscript_func(ctx, doc, func, dict, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + load_postscript_func(ctx, doc, func, dict, pdf_to_num(ctx, dict)); break; default: - fz_throw(ctx, FZ_ERROR_GENERIC, "unknown function type (%d %d R)", pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + fz_throw(ctx, FZ_ERROR_GENERIC, "unknown function type (%d 0 R)", pdf_to_num(ctx, dict)); } pdf_store_item(ctx, dict, func, func->base.size); diff --git a/source/pdf/pdf-graft.c b/source/pdf/pdf-graft.c index 758addde..d7cb8b42 100644 --- a/source/pdf/pdf-graft.c +++ b/source/pdf/pdf-graft.c @@ -112,7 +112,7 @@ pdf_graft_object(fz_context *ctx, pdf_document *dst, pdf_document *src, pdf_obj ref = pdf_new_indirect(ctx, dst, new_num, 0); if (pdf_is_stream(ctx, obj_ref)) { - buffer = pdf_load_raw_stream(ctx, src, src_num, 0); + buffer = pdf_load_raw_stream(ctx, src, src_num); pdf_update_stream(ctx, dst, ref, buffer, 1); } } diff --git a/source/pdf/pdf-image.c b/source/pdf/pdf-image.c index 3bba27ad..50d29e93 100644 --- a/source/pdf/pdf-image.c +++ b/source/pdf/pdf-image.c @@ -156,11 +156,8 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di /* Do we load from a ref, or do we load an inline stream? */ if (cstm == NULL) { - /* Just load the compressed image data now and we can - * decode it on demand. */ - int num = pdf_to_num(ctx, dict); - int gen = pdf_to_gen(ctx, dict); - buffer = pdf_load_compressed_stream(ctx, doc, num, gen); + /* Just load the compressed image data now and we can decode it on demand. */ + buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict)); image = fz_new_image_from_compressed_buffer(ctx, w, h, bpc, colorspace, 96, 96, interpolate, imagemask, decode, use_colorkey ? colorkey : NULL, buffer, mask); image->invert_cmyk_jpeg = 0; } @@ -224,7 +221,7 @@ pdf_load_jpx(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int forcemask) fz_var(colorspace); fz_var(mask); - buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, dict)); /* FIXME: We can't handle decode arrays for indexed images currently */ fz_try(ctx) diff --git a/source/pdf/pdf-interpret.c b/source/pdf/pdf-interpret.c index 6ad384f3..af5a0ed5 100644 --- a/source/pdf/pdf-interpret.c +++ b/source/pdf/pdf-interpret.c @@ -137,7 +137,6 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const /* An Optional Content Group */ int default_value = 0; int num = pdf_to_num(ctx, ocg); - int gen = pdf_to_gen(ctx, ocg); int len = desc->len; int i; pdf_obj *es; @@ -145,7 +144,7 @@ pdf_is_hidden_ocg(fz_context *ctx, pdf_ocg_descriptor *desc, pdf_obj *rdb, const /* by default an OCG is visible, unless it's explicitly hidden */ for (i = 0; i < len; i++) { - if (desc->ocgs[i].num == num && desc->ocgs[i].gen == gen) + if (desc->ocgs[i].num == num) { default_value = desc->ocgs[i].state == 0; break; @@ -438,7 +437,7 @@ pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_ob group = pdf_dict_get(ctx, obj, PDF_NAME_G); if (!group) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load softmask xobject (%d %d R)", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load softmask xobject (%d 0 R)", pdf_to_num(ctx, obj)); xobj = pdf_load_xobject(ctx, csi->doc, group); fz_try(ctx) diff --git a/source/pdf/pdf-parse.c b/source/pdf/pdf-parse.c index cfedd67b..db1c4293 100644 --- a/source/pdf/pdf-parse.c +++ b/source/pdf/pdf-parse.c @@ -67,7 +67,7 @@ pdf_to_utf8(fz_context *ctx, pdf_document *doc, pdf_obj *src) } else if (pdf_is_stream(ctx, src)) { - stmbuf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, src), pdf_to_gen(ctx, src)); + stmbuf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, src)); srclen = fz_buffer_storage(ctx, stmbuf, (unsigned char **)&srcptr); } else diff --git a/source/pdf/pdf-repair.c b/source/pdf/pdf-repair.c index b0c56be0..fdb48fe9 100644 --- a/source/pdf/pdf-repair.c +++ b/source/pdf/pdf-repair.c @@ -193,7 +193,7 @@ atobjend: } static void -pdf_repair_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen) +pdf_repair_obj_stm(fz_context *ctx, pdf_document *doc, int stm_num) { pdf_obj *obj; fz_stream *stm = NULL; @@ -207,13 +207,13 @@ pdf_repair_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen) fz_try(ctx) { - obj = pdf_load_object(ctx, doc, num, gen); + obj = pdf_load_object(ctx, doc, stm_num); count = pdf_to_int(ctx, pdf_dict_get(ctx, obj, PDF_NAME_N)); pdf_drop_obj(ctx, obj); - stm = pdf_open_stream(ctx, doc, num, gen); + stm = pdf_open_stream(ctx, doc, stm_num); for (i = 0; i < count; i++) { @@ -221,7 +221,7 @@ pdf_repair_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen) tok = pdf_lex(ctx, stm, &buf); if (tok != PDF_TOK_INT) - fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d 0 R)", stm_num); n = buf.i; if (n < 0) @@ -236,8 +236,9 @@ pdf_repair_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen) } entry = pdf_get_populating_xref_entry(ctx, doc, n); - entry->ofs = num; + entry->ofs = stm_num; entry->gen = i; + entry->num = n; entry->stm_ofs = 0; pdf_drop_obj(ctx, entry->obj); entry->obj = NULL; @@ -245,7 +246,7 @@ pdf_repair_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen) tok = pdf_lex(ctx, stm, &buf); if (tok != PDF_TOK_INT) - fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d 0 R)", stm_num); } } fz_always(ctx) @@ -509,6 +510,7 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) entry->type = 'f'; entry->ofs = 0; entry->gen = 0; + entry->num = 0; entry->stm_ofs = 0; } @@ -519,13 +521,14 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) entry->type = 'n'; entry->ofs = list[i].ofs; entry->gen = list[i].gen; + entry->num = list[i].num; entry->stm_ofs = list[i].stm_ofs; /* correct stream length for unencrypted documents */ if (!encrypt && list[i].stm_len >= 0) { - dict = pdf_load_object(ctx, doc, list[i].num, list[i].gen); + dict = pdf_load_object(ctx, doc, list[i].num); length = pdf_new_int(ctx, doc, list[i].stm_len); pdf_dict_put(ctx, dict, PDF_NAME_Length, length); @@ -539,6 +542,7 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc) entry->type = 'f'; entry->ofs = 0; entry->gen = 65535; + entry->num = 0; entry->stm_ofs = 0; next = 0; @@ -651,11 +655,11 @@ pdf_repair_obj_stms(fz_context *ctx, pdf_document *doc) if (entry->stm_ofs) { - dict = pdf_load_object(ctx, doc, i, 0); + dict = pdf_load_object(ctx, doc, i); fz_try(ctx) { if (pdf_name_eq(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Type), PDF_NAME_ObjStm)) - pdf_repair_obj_stm(ctx, doc, i, 0); + pdf_repair_obj_stm(ctx, doc, i); } fz_catch(ctx) { diff --git a/source/pdf/pdf-resources.c b/source/pdf/pdf-resources.c index b66c0a23..07fc873f 100644 --- a/source/pdf/pdf-resources.c +++ b/source/pdf/pdf-resources.c @@ -64,7 +64,7 @@ res_image_init(fz_context *ctx, pdf_document *doc, pdf_res_table *table) len = pdf_count_objects(ctx, doc); for (k = 1; k < len; k++) { - obj = pdf_load_object(ctx, doc, k, 0); + obj = pdf_load_object(ctx, doc, k); type = pdf_dict_get(ctx, obj, PDF_NAME_Subtype); if (pdf_name_eq(ctx, type, PDF_NAME_Image)) { diff --git a/source/pdf/pdf-shade.c b/source/pdf/pdf-shade.c index b8e138c0..7815b3ce 100644 --- a/source/pdf/pdf-shade.c +++ b/source/pdf/pdf-shade.c @@ -256,7 +256,7 @@ pdf_load_type4_shade(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf_ob if (funcs > 0) pdf_sample_shade_function(ctx, shade, funcs, func, shade->u.m.c0[0], shade->u.m.c1[0]); - shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict)); } static void @@ -268,7 +268,7 @@ pdf_load_type5_shade(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf_ob if (funcs > 0) pdf_sample_shade_function(ctx, shade, funcs, func, shade->u.m.c0[0], shade->u.m.c1[0]); - shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict)); } /* Type 6 & 7 -- Patch mesh shadings */ @@ -282,7 +282,7 @@ pdf_load_type6_shade(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf_ob if (funcs > 0) pdf_sample_shade_function(ctx, shade, funcs, func, shade->u.m.c0[0], shade->u.m.c1[0]); - shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict)); } static void @@ -294,7 +294,7 @@ pdf_load_type7_shade(fz_context *ctx, pdf_document *doc, fz_shade *shade, pdf_ob if (funcs > 0) pdf_sample_shade_function(ctx, shade, funcs, func, shade->u.m.c0[0], shade->u.m.c1[0]); - shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + shade->buffer = pdf_load_compressed_stream(ctx, doc, pdf_to_num(ctx, dict)); } /* Load all of the shading dictionary parameters, then switch on the shading type. */ @@ -361,7 +361,7 @@ pdf_load_shading_dict(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const f func[0] = pdf_load_function(ctx, doc, obj, in, out); if (!func[0]) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load shading function (%d %d R)", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load shading function (%d 0 R)", pdf_to_num(ctx, obj)); } else if (pdf_is_array(ctx, obj)) { @@ -387,13 +387,13 @@ pdf_load_shading_dict(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const f { func[i] = pdf_load_function(ctx, doc, pdf_array_get(ctx, obj, i), in, out); if (!func[i]) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load shading function (%d %d R)", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load shading function (%d 0 R)", pdf_to_num(ctx, obj)); } } else if (type < 4) { /* Functions are compulsory for types 1,2,3 */ - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load shading function (%d %d R)", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load shading function (%d 0 R)", pdf_to_num(ctx, obj)); } shade->type = type; diff --git a/source/pdf/pdf-store.c b/source/pdf/pdf-store.c index 7be7eafe..fa5cf76e 100644 --- a/source/pdf/pdf-store.c +++ b/source/pdf/pdf-store.c @@ -7,9 +7,8 @@ pdf_make_hash_key(fz_context *ctx, fz_store_hash *hash, void *key_) if (!pdf_is_indirect(ctx, key)) return 0; - hash->u.i.i0 = pdf_to_num(ctx, key); - hash->u.i.i1 = pdf_to_gen(ctx, key); - hash->u.i.ptr = pdf_get_indirect_document(ctx, key); + hash->u.pi.i = pdf_to_num(ctx, key); + hash->u.pi.ptr = pdf_get_indirect_document(ctx, key); return 1; } @@ -37,7 +36,7 @@ pdf_print_key(fz_context *ctx, fz_output *out, void *key_) pdf_obj *key = (pdf_obj *)key_; if (pdf_is_indirect(ctx, key)) - fz_printf(ctx, out, "(%d %d R) ", pdf_to_num(ctx, key), pdf_to_gen(ctx, key)); + fz_printf(ctx, out, "(%d 0 R) ", pdf_to_num(ctx, key)); else pdf_print_obj(ctx, out, key, 0); } diff --git a/source/pdf/pdf-stream.c b/source/pdf/pdf-stream.c index 6e64ae63..f54c2f91 100644 --- a/source/pdf/pdf-stream.c +++ b/source/pdf/pdf-stream.c @@ -4,14 +4,14 @@ * Check if an object is a stream or not. */ int -pdf_obj_num_is_stream(fz_context *ctx, pdf_document *doc, int num, int gen) +pdf_obj_num_is_stream(fz_context *ctx, pdf_document *doc, int num) { pdf_xref_entry *entry; if (num <= 0 || num >= pdf_xref_len(ctx, doc)) return 0; - entry = pdf_cache_object(ctx, doc, num, gen); + entry = pdf_cache_object(ctx, doc, num); return entry->stm_ofs != 0 || entry->stm_buf; } @@ -21,7 +21,7 @@ pdf_is_stream(fz_context *ctx, pdf_obj *obj) { pdf_document *doc = pdf_get_bound_document(ctx, obj); int num = pdf_obj_parent_num(ctx, obj); - return pdf_obj_num_is_stream(ctx, doc, num, 0); + return pdf_obj_num_is_stream(ctx, doc, num); } /* @@ -68,7 +68,7 @@ pdf_load_jbig2_globals(fz_context *ctx, pdf_document *doc, pdf_obj *dict) fz_try(ctx) { - buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, dict), pdf_to_gen(ctx, dict)); + buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, dict)); globals = fz_load_jbig2_globals(ctx, buf); pdf_store_item(ctx, dict, globals, buf->len); } @@ -251,16 +251,26 @@ build_filter_chain(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj * orig_num and orig_gen are used purely to seed the encryption. */ static fz_stream * -pdf_open_raw_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *stmobj, int num, int orig_num, int orig_gen, fz_off_t offset) +pdf_open_raw_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj *stmobj, int num, int *orig_num, int *orig_gen, fz_off_t offset) { + pdf_xref_entry *x = NULL; int hascrypt; int len; if (num > 0 && num < pdf_xref_len(ctx, doc)) { - pdf_xref_entry *entry = pdf_get_xref_entry(ctx, doc, num); - if (entry->stm_buf) - return fz_open_buffer(ctx, entry->stm_buf); + x = pdf_get_xref_entry(ctx, doc, num); + *orig_num = x->num; + *orig_gen = x->gen; + if (x->stm_buf) + return fz_open_buffer(ctx, x->stm_buf); + } + else + { + /* We only end up here when called from pdf_open_stream_with_offset to parse new format XRef sections. */ + /* New style XRef sections must have generation number 0. */ + *orig_num = num; + *orig_gen = 0; } /* don't close chain when we close this filter */ @@ -271,7 +281,7 @@ pdf_open_raw_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_ob hascrypt = pdf_stream_has_crypt(ctx, stmobj); if (doc->crypt && !hascrypt) - chain = pdf_open_crypt(ctx, chain, doc->crypt, orig_num, orig_gen); + chain = pdf_open_crypt(ctx, chain, doc->crypt, *orig_num, *orig_gen); return chain; } @@ -281,15 +291,16 @@ pdf_open_raw_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_ob * to stream length and decrypting. */ static fz_stream * -pdf_open_filter(fz_context *ctx, pdf_document *doc, fz_stream *chain, pdf_obj *stmobj, int num, int orig_num, int orig_gen, fz_off_t offset, fz_compression_params *imparams) +pdf_open_filter(fz_context *ctx, pdf_document *doc, fz_stream *chain, pdf_obj *stmobj, int num, fz_off_t offset, fz_compression_params *imparams) { pdf_obj *filters; pdf_obj *params; + int orig_num, orig_gen; filters = pdf_dict_geta(ctx, stmobj, PDF_NAME_Filter, PDF_NAME_F); params = pdf_dict_geta(ctx, stmobj, PDF_NAME_DecodeParms, PDF_NAME_DP); - chain = pdf_open_raw_filter(ctx, chain, doc, stmobj, num, orig_num, orig_gen, offset); + chain = pdf_open_raw_filter(ctx, chain, doc, stmobj, num, &orig_num, &orig_gen, offset); fz_var(chain); @@ -371,39 +382,34 @@ pdf_load_compressed_inline_image(fz_context *ctx, pdf_document *doc, pdf_obj *di * Open a stream for reading the raw (compressed but decrypted) data. */ fz_stream * -pdf_open_raw_stream(fz_context *ctx, pdf_document *doc, int num, int gen) -{ - return pdf_open_raw_renumbered_stream(ctx, doc, num, gen, num, gen); -} - -fz_stream * -pdf_open_raw_renumbered_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen) +pdf_open_raw_stream(fz_context *ctx, pdf_document *doc, int num) { pdf_xref_entry *x; + int orig_num, orig_gen; if (num <= 0 || num >= pdf_xref_len(ctx, doc)) - fz_throw(ctx, FZ_ERROR_GENERIC, "object id out of range (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "object id out of range (%d 0 R)", num); - x = pdf_cache_object(ctx, doc, num, gen); + x = pdf_cache_object(ctx, doc, num); if (x->stm_ofs == 0) fz_throw(ctx, FZ_ERROR_GENERIC, "object is not a stream"); - return pdf_open_raw_filter(ctx, doc->file, doc, x->obj, num, orig_num, orig_gen, x->stm_ofs); + return pdf_open_raw_filter(ctx, doc->file, doc, x->obj, num, &orig_num, &orig_gen, x->stm_ofs); } static fz_stream * -pdf_open_image_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen, fz_compression_params *params) +pdf_open_image_stream(fz_context *ctx, pdf_document *doc, int num, fz_compression_params *params) { pdf_xref_entry *x; if (num <= 0 || num >= pdf_xref_len(ctx, doc)) - fz_throw(ctx, FZ_ERROR_GENERIC, "object id out of range (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "object id out of range (%d 0 R)", num); - x = pdf_cache_object(ctx, doc, num, gen); + x = pdf_cache_object(ctx, doc, num); if (x->stm_ofs == 0 && x->stm_buf == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "object is not a stream"); - return pdf_open_filter(ctx, doc, doc->file, x->obj, num, orig_num, orig_gen, x->stm_ofs, params); + return pdf_open_filter(ctx, doc, doc->file, x->obj, num, x->stm_ofs, params); } /* @@ -412,51 +418,45 @@ pdf_open_image_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int * Using doc->file while a stream is open is a Bad idea. */ fz_stream * -pdf_open_stream(fz_context *ctx, pdf_document *doc, int num, int gen) +pdf_open_stream(fz_context *ctx, pdf_document *doc, int num) { - return pdf_open_image_stream(ctx, doc, num, gen, num, gen, NULL); + return pdf_open_image_stream(ctx, doc, num, NULL); } fz_stream * -pdf_open_stream_with_offset(fz_context *ctx, pdf_document *doc, int num, int gen, pdf_obj *dict, fz_off_t stm_ofs) +pdf_open_stream_with_offset(fz_context *ctx, pdf_document *doc, int num, pdf_obj *dict, fz_off_t stm_ofs) { if (stm_ofs == 0) fz_throw(ctx, FZ_ERROR_GENERIC, "object is not a stream"); - - return pdf_open_filter(ctx, doc, doc->file, dict, num, num, gen, stm_ofs, NULL); + return pdf_open_filter(ctx, doc, doc->file, dict, num, stm_ofs, NULL); } /* * Load raw (compressed but decrypted) contents of a stream into buf. */ fz_buffer * -pdf_load_raw_stream(fz_context *ctx, pdf_document *doc, int num, int gen) -{ - return pdf_load_raw_renumbered_stream(ctx, doc, num, gen, num, gen); -} - -fz_buffer * -pdf_load_raw_renumbered_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen) +pdf_load_raw_stream(fz_context *ctx, pdf_document *doc, int num) { fz_stream *stm; pdf_obj *dict; int len; fz_buffer *buf; + pdf_xref_entry *x; if (num > 0 && num < pdf_xref_len(ctx, doc)) { - pdf_xref_entry *entry = pdf_get_xref_entry(ctx, doc, num); - if (entry->stm_buf) - return fz_keep_buffer(ctx, entry->stm_buf); + x = pdf_get_xref_entry(ctx, doc, num); + if (x->stm_buf) + return fz_keep_buffer(ctx, x->stm_buf); } - dict = pdf_load_object(ctx, doc, num, gen); + dict = pdf_load_object(ctx, doc, num); len = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Length)); pdf_drop_obj(ctx, dict); - stm = pdf_open_raw_renumbered_stream(ctx, doc, num, gen, orig_num, orig_gen); + stm = pdf_open_raw_stream(ctx, doc, num); buf = fz_read_all(ctx, stm, len); @@ -534,7 +534,7 @@ can_reuse_buffer(fz_context *ctx, pdf_xref_entry *entry, fz_compression_params * } static fz_buffer * -pdf_load_image_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen, fz_compression_params *params, int *truncated) +pdf_load_image_stream(fz_context *ctx, pdf_document *doc, int num, fz_compression_params *params, int *truncated) { fz_stream *stm = NULL; pdf_obj *dict, *obj; @@ -552,7 +552,7 @@ pdf_load_image_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int return fz_keep_buffer(ctx, entry->stm_buf); } - dict = pdf_load_object(ctx, doc, num, gen); + dict = pdf_load_object(ctx, doc, num); len = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_Length)); obj = pdf_dict_get(ctx, dict, PDF_NAME_Filter); @@ -563,7 +563,7 @@ pdf_load_image_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int pdf_drop_obj(ctx, dict); - stm = pdf_open_image_stream(ctx, doc, num, gen, orig_num, orig_gen, params); + stm = pdf_open_image_stream(ctx, doc, num, params); fz_try(ctx) { @@ -588,25 +588,25 @@ pdf_load_image_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int * Load uncompressed contents of a stream into buf. */ fz_buffer * -pdf_load_stream(fz_context *ctx, pdf_document *doc, int num, int gen) +pdf_load_stream(fz_context *ctx, pdf_document *doc, int num) { - return pdf_load_image_stream(ctx, doc, num, gen, num, gen, NULL, NULL); + return pdf_load_image_stream(ctx, doc, num, NULL, NULL); } fz_buffer * -pdf_load_renumbered_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen, int *truncated) +pdf_load_stream_truncated(fz_context *ctx, pdf_document *doc, int num, int *truncated) { - return pdf_load_image_stream(ctx, doc, num, gen, orig_num, orig_gen, NULL, truncated); + return pdf_load_image_stream(ctx, doc, num, NULL, truncated); } fz_compressed_buffer * -pdf_load_compressed_stream(fz_context *ctx, pdf_document *doc, int num, int gen) +pdf_load_compressed_stream(fz_context *ctx, pdf_document *doc, int num) { fz_compressed_buffer *bc = fz_malloc_struct(ctx, fz_compressed_buffer); fz_try(ctx) { - bc->buffer = pdf_load_image_stream(ctx, doc, num, gen, num, gen, &bc->params, NULL); + bc->buffer = pdf_load_image_stream(ctx, doc, num, &bc->params, NULL); } fz_catch(ctx) { @@ -631,7 +631,7 @@ pdf_open_object_array(fz_context *ctx, pdf_document *doc, pdf_obj *list) pdf_obj *obj = pdf_array_get(ctx, list, i); fz_try(ctx) { - fz_concat_push(ctx, stm, pdf_open_stream(ctx, doc, pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj))); + fz_concat_push(ctx, stm, pdf_open_stream(ctx, doc, pdf_to_num(ctx, obj))); } fz_catch(ctx) { @@ -647,15 +647,14 @@ pdf_open_object_array(fz_context *ctx, pdf_document *doc, pdf_obj *list) fz_stream * pdf_open_contents_stream(fz_context *ctx, pdf_document *doc, pdf_obj *obj) { - int num, gen; + int num; if (pdf_is_array(ctx, obj)) return pdf_open_object_array(ctx, doc, obj); num = pdf_to_num(ctx, obj); - gen = pdf_to_gen(ctx, obj); if (pdf_is_stream(ctx, obj)) - return pdf_open_image_stream(ctx, doc, num, gen, num, gen, NULL); + return pdf_open_image_stream(ctx, doc, num, NULL); - fz_throw(ctx, FZ_ERROR_GENERIC, "pdf object stream missing (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "pdf object stream missing (%d 0 R)", num); } diff --git a/source/pdf/pdf-type3.c b/source/pdf/pdf-type3.c index 908c4354..8eeebd19 100644 --- a/source/pdf/pdf-type3.c +++ b/source/pdf/pdf-type3.c @@ -160,7 +160,7 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d obj = pdf_dict_gets(ctx, charprocs, estrings[i]); if (pdf_is_stream(ctx, obj)) { - fontdesc->font->t3procs[i] = pdf_load_stream(ctx, doc, pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fontdesc->font->t3procs[i] = pdf_load_stream(ctx, doc, pdf_to_num(ctx, obj)); fontdesc->size += fontdesc->font->t3procs[i]->cap; fontdesc->size += 0; // TODO: display list size calculation } diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c index 1dce7235..aa801b3e 100644 --- a/source/pdf/pdf-write.c +++ b/source/pdf/pdf-write.c @@ -68,7 +68,6 @@ struct pdf_write_state_s int *errors; /* The following extras are required for linearization */ int *rev_renumber_map; - int *rev_gen_list; int start; fz_off_t first_xref_offset; fz_off_t main_xref_offset; @@ -520,7 +519,6 @@ objects_dump(fz_context *ctx, pdf_document *doc, pdf_write_state *opts) static pdf_obj *markref(fz_context *ctx, pdf_document *doc, pdf_write_state *opts, pdf_obj *obj, int *duff) { int num = pdf_to_num(ctx, obj); - int gen = pdf_to_gen(ctx, obj); if (num <= 0 || num >= pdf_xref_len(ctx, doc)) { @@ -536,7 +534,7 @@ static pdf_obj *markref(fz_context *ctx, pdf_document *doc, pdf_write_state *opt /* Bake in /Length in stream objects */ fz_try(ctx) { - if (pdf_obj_num_is_stream(ctx, doc, num, gen)) + if (pdf_obj_num_is_stream(ctx, doc, num)) { pdf_obj *len = pdf_dict_get(ctx, obj, PDF_NAME_Length); if (pdf_is_indirect(ctx, len)) @@ -653,13 +651,13 @@ static void removeduplicateobjs(fz_context *ctx, pdf_document *doc, pdf_write_st /* * Comparing stream objects data contents would take too long. * - * pdf_is_stream calls pdf_cache_object and ensures + * pdf_obj_num_is_stream calls pdf_cache_object and ensures * that the xref table has the objects loaded. */ fz_try(ctx) { - streama = pdf_obj_num_is_stream(ctx, doc, num, 0); - streamb = pdf_obj_num_is_stream(ctx, doc, other, 0); + streama = pdf_obj_num_is_stream(ctx, doc, num); + streamb = pdf_obj_num_is_stream(ctx, doc, other); differ = streama || streamb; if (streama && streamb && opts->do_garbage >= 4) differ = 0; @@ -695,8 +693,8 @@ static void removeduplicateobjs(fz_context *ctx, pdf_document *doc, pdf_write_st { unsigned char *dataa, *datab; size_t lena, lenb; - sa = pdf_load_raw_renumbered_stream(ctx, doc, num, 0, num, 0); - sb = pdf_load_raw_renumbered_stream(ctx, doc, other, 0, other, 0); + sa = pdf_load_raw_stream(ctx, doc, num); + sb = pdf_load_raw_stream(ctx, doc, other); lena = fz_buffer_storage(ctx, sa, &dataa); lenb = fz_buffer_storage(ctx, sb, &datab); if (lena == lenb && memcmp(dataa, datab, lena) == 0) @@ -758,7 +756,6 @@ static void compactxref(fz_context *ctx, pdf_document *doc, pdf_write_state *opt else if (opts->renumber_map[num] == num) { opts->rev_renumber_map[newnum] = opts->rev_renumber_map[num]; - opts->rev_gen_list[newnum] = opts->rev_gen_list[num]; opts->renumber_map[num] = newnum++; } /* Otherwise it's used, and moved. We know that it must have @@ -1159,7 +1156,6 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_state *opts opts->renumber_map[params_num] = params_num; opts->rev_renumber_map[params_num] = params_num; opts->gen_list[params_num] = 0; - opts->rev_gen_list[params_num] = 0; pdf_dict_put_drop(ctx, params_obj, PDF_NAME_Linearized, pdf_new_real(ctx, doc, 1.0)); opts->linear_l = pdf_new_int(ctx, doc, INT_MIN); pdf_dict_put(ctx, params_obj, PDF_NAME_L, opts->linear_l); @@ -1187,7 +1183,6 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_state *opts opts->renumber_map[hint_num] = hint_num; opts->rev_renumber_map[hint_num] = hint_num; opts->gen_list[hint_num] = 0; - opts->rev_gen_list[hint_num] = 0; pdf_dict_put_drop(ctx, hint_obj, PDF_NAME_P, pdf_new_int(ctx, doc, 0)); opts->hints_s = pdf_new_int(ctx, doc, INT_MIN); pdf_dict_put(ctx, hint_obj, PDF_NAME_S, opts->hints_s); @@ -1400,7 +1395,6 @@ linearize(fz_context *ctx, pdf_document *doc, pdf_write_state *opts) int n = pdf_xref_len(ctx, doc) + 2; int *reorder; int *rev_renumber_map; - int *rev_gen_list; opts->page_object_lists = page_objects_list_create(ctx); @@ -1428,7 +1422,6 @@ linearize(fz_context *ctx, pdf_document *doc, pdf_write_state *opts) /* Allocate/init the structures used for renumbering the objects */ reorder = fz_calloc(ctx, n, sizeof(int)); rev_renumber_map = fz_calloc(ctx, n, sizeof(int)); - rev_gen_list = fz_calloc(ctx, n, sizeof(int)); for (i = 0; i < n; i++) { reorder[i] = i; @@ -1454,12 +1447,9 @@ linearize(fz_context *ctx, pdf_document *doc, pdf_write_state *opts) { opts->renumber_map[reorder[i]] = i; rev_renumber_map[i] = opts->rev_renumber_map[reorder[i]]; - rev_gen_list[i] = opts->rev_gen_list[reorder[i]]; } fz_free(ctx, opts->rev_renumber_map); - fz_free(ctx, opts->rev_gen_list); opts->rev_renumber_map = rev_renumber_map; - opts->rev_gen_list = rev_gen_list; fz_free(ctx, reorder); /* Apply the renumber_map */ @@ -1511,7 +1501,7 @@ static void preloadobjstms(fz_context *ctx, pdf_document *doc) { if (pdf_get_xref_entry(ctx, doc, num)->type == 'o') { - obj = pdf_load_object(ctx, doc, num, 0); + obj = pdf_load_object(ctx, doc, num); pdf_drop_obj(ctx, obj); } } @@ -1641,10 +1631,8 @@ static void copystream(fz_context *ctx, pdf_document *doc, pdf_write_state *opts fz_buffer *buf, *tmp; pdf_obj *newlen; pdf_obj *obj; - int orig_num = opts->rev_renumber_map[num]; - int orig_gen = opts->rev_gen_list[num]; - buf = pdf_load_raw_renumbered_stream(ctx, doc, num, gen, orig_num, orig_gen); + buf = pdf_load_raw_stream(ctx, doc, num); obj = pdf_copy_dict(ctx, obj_orig); @@ -1687,11 +1675,9 @@ static void expandstream(fz_context *ctx, pdf_document *doc, pdf_write_state *op fz_buffer *buf, *tmp; pdf_obj *newlen; pdf_obj *obj; - int orig_num = opts->rev_renumber_map[num]; - int orig_gen = opts->rev_gen_list[num]; int truncated = 0; - buf = pdf_load_renumbered_stream(ctx, doc, num, gen, orig_num, orig_gen, (opts->continue_on_error ? &truncated : NULL)); + buf = pdf_load_stream_truncated(ctx, doc, num, (opts->continue_on_error ? &truncated : NULL)); if (truncated && opts->errors) (*opts->errors)++; @@ -1802,7 +1788,7 @@ static void writeobject(fz_context *ctx, pdf_document *doc, pdf_write_state *opt fz_try(ctx) { - obj = pdf_load_object(ctx, doc, num, gen); + obj = pdf_load_object(ctx, doc, num); } fz_catch(ctx) { @@ -1838,7 +1824,7 @@ static void writeobject(fz_context *ctx, pdf_document *doc, pdf_write_state *opt } entry = pdf_get_xref_entry(ctx, doc, num); - if (!pdf_obj_num_is_stream(ctx, doc, num, gen)) + if (!pdf_obj_num_is_stream(ctx, doc, num)) { fz_printf(ctx, opts->out, "%d %d obj\n", num, gen); pdf_print_obj(ctx, opts->out, obj, opts->do_tight); @@ -2516,7 +2502,7 @@ make_hint_stream(fz_context *ctx, pdf_document *doc, pdf_write_state *opts) fz_try(ctx) { make_page_offset_hints(ctx, doc, opts, buf); - pdf_update_stream(ctx, doc, pdf_load_object(ctx, doc, pdf_xref_len(ctx, doc)-1, 0), buf, 0); + pdf_update_stream(ctx, doc, pdf_load_object(ctx, doc, pdf_xref_len(ctx, doc)-1), buf, 0); opts->hintstream_len = (int)buf->len; fz_drop_buffer(ctx, buf); } @@ -2716,7 +2702,6 @@ static void initialise_write_state(fz_context *ctx, pdf_document *doc, const pdf opts->gen_list = fz_calloc(ctx, xref_len + 3, sizeof(int)); opts->renumber_map = fz_malloc_array(ctx, xref_len + 3, sizeof(int)); opts->rev_renumber_map = fz_malloc_array(ctx, xref_len + 3, sizeof(int)); - opts->rev_gen_list = fz_malloc_array(ctx, xref_len + 3, sizeof(int)); opts->continue_on_error = in_opts->continue_on_error; opts->errors = in_opts->errors; @@ -2726,7 +2711,6 @@ static void initialise_write_state(fz_context *ctx, pdf_document *doc, const pdf opts->ofs_list[num] = 0; opts->renumber_map[num] = num; opts->rev_renumber_map[num] = num; - opts->rev_gen_list[num] = pdf_get_xref_entry(ctx, doc, num)->gen; } } @@ -2738,7 +2722,6 @@ static void finalise_write_state(fz_context *ctx, pdf_write_state *opts) fz_free(ctx, opts->gen_list); fz_free(ctx, opts->renumber_map); fz_free(ctx, opts->rev_renumber_map); - fz_free(ctx, opts->rev_gen_list); pdf_drop_obj(ctx, opts->linear_l); pdf_drop_obj(ctx, opts->linear_h0); pdf_drop_obj(ctx, opts->linear_h1); diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c index 17de3f60..54dbc4b6 100644 --- a/source/pdf/pdf-xref.c +++ b/source/pdf/pdf-xref.c @@ -99,6 +99,7 @@ static void pdf_resize_xref(fz_context *ctx, pdf_document *doc, int newlen) sub->table[i].type = 0; sub->table[i].ofs = 0; sub->table[i].gen = 0; + sub->table[i].num = 0; sub->table[i].stm_ofs = 0; sub->table[i].stm_buf = NULL; sub->table[i].obj = NULL; @@ -826,9 +827,10 @@ pdf_read_old_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf) entry->ofs = fz_atoo(s); entry->gen = fz_atoi(s + 11); + entry->num = (int)i; entry->type = s[17]; if (s[17] != 'f' && s[17] != 'n' && s[17] != 'o') - fz_throw(ctx, FZ_ERROR_GENERIC, "unexpected xref type: %#x (%d %d R)", s[17], (int)i, entry->gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "unexpected xref type: %#x (%d %d R)", s[17], entry->num, entry->gen); } } } @@ -879,6 +881,7 @@ pdf_read_new_xref_section(fz_context *ctx, pdf_document *doc, fz_stream *stm, fz entry->type = t == 0 ? 'f' : t == 1 ? 'n' : t == 2 ? 'o' : 0; entry->ofs = w1 ? b : 0; entry->gen = w2 ? c : 0; + entry->num = i; } } @@ -918,13 +921,13 @@ pdf_read_new_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf) obj = pdf_dict_get(ctx, trailer, PDF_NAME_Size); if (!obj) - fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream missing Size entry (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream missing Size entry (%d 0 R)", num); size = pdf_to_int(ctx, obj); obj = pdf_dict_get(ctx, trailer, PDF_NAME_W); if (!obj) - fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream missing W entry (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream missing W entry (%d R)", num); w0 = pdf_to_int(ctx, pdf_array_get(ctx, obj, 0)); w1 = pdf_to_int(ctx, pdf_array_get(ctx, obj, 1)); w2 = pdf_to_int(ctx, pdf_array_get(ctx, obj, 2)); @@ -942,7 +945,7 @@ pdf_read_new_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf) index = pdf_dict_get(ctx, trailer, PDF_NAME_Index); - stm = pdf_open_stream_with_offset(ctx, doc, num, gen, trailer, stm_ofs); + stm = pdf_open_stream_with_offset(ctx, doc, num, trailer, stm_ofs); if (!index) { @@ -961,6 +964,7 @@ pdf_read_new_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf) entry = pdf_get_populating_xref_entry(ctx, doc, num); entry->ofs = ofs; entry->gen = gen; + entry->num = num; entry->stm_ofs = stm_ofs; pdf_drop_obj(ctx, entry->obj); entry->obj = pdf_keep_obj(ctx, trailer); @@ -1159,6 +1163,7 @@ pdf_load_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf) { entry->type = 'f'; entry->gen = 65535; + entry->num = 0; } /* broken pdfs where first object is not free */ else if (entry->type != 'f') @@ -1300,10 +1305,9 @@ pdf_ocg_set_config(fz_context *ctx, pdf_document *doc, int config) { pdf_obj *o = pdf_array_get(ctx, obj, i); int n = pdf_to_num(ctx, o); - int g = pdf_to_gen(ctx, o); for (j=0; j < len; j++) { - if (desc->ocgs[j].num == n && desc->ocgs[j].gen == g) + if (desc->ocgs[j].num == n) { desc->ocgs[j].state = 1; break; @@ -1317,10 +1321,9 @@ pdf_ocg_set_config(fz_context *ctx, pdf_document *doc, int config) { pdf_obj *o = pdf_array_get(ctx, obj, i); int n = pdf_to_num(ctx, o); - int g = pdf_to_gen(ctx, o); for (j=0; j < len; j++) { - if (desc->ocgs[j].num == n && desc->ocgs[j].gen == g) + if (desc->ocgs[j].num == n) { desc->ocgs[j].state = 0; break; @@ -1370,7 +1373,6 @@ pdf_read_ocg(fz_context *ctx, pdf_document *doc) { pdf_obj *o = pdf_array_get(ctx, ocg, i); desc->ocgs[i].num = pdf_to_num(ctx, o); - desc->ocgs[i].gen = pdf_to_gen(ctx, o); desc->ocgs[i].state = 1; } doc->ocg = desc; @@ -1481,7 +1483,7 @@ pdf_init_document(fz_context *ctx, pdf_document *doc) fz_try(ctx) { - dict = pdf_load_object(ctx, doc, i, 0); + dict = pdf_load_object(ctx, doc, i); } fz_catch(ctx) { @@ -1640,7 +1642,7 @@ pdf_print_xref(fz_context *ctx, pdf_document *doc) */ static pdf_xref_entry * -pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen, pdf_lexbuf *buf, int target) +pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, pdf_lexbuf *buf, int target) { fz_stream *stm = NULL; pdf_obj *objstm = NULL; @@ -1661,7 +1663,7 @@ pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen, pdf_lexbu fz_try(ctx) { - objstm = pdf_load_object(ctx, doc, num, gen); + objstm = pdf_load_object(ctx, doc, num); count = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_N)); first = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_First)); @@ -1674,17 +1676,17 @@ pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, int gen, pdf_lexbu numbuf = fz_calloc(ctx, count, sizeof(*numbuf)); ofsbuf = fz_calloc(ctx, count, sizeof(*ofsbuf)); - stm = pdf_open_stream(ctx, doc, num, gen); + stm = pdf_open_stream(ctx, doc, num); for (i = 0; i < count; i++) { tok = pdf_lex(ctx, stm, buf); if (tok != PDF_TOK_INT) - fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d 0 R)", num); numbuf[i] = buf->i; tok = pdf_lex(ctx, stm, buf); if (tok != PDF_TOK_INT) - fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "corrupt object stream (%d 0 R)", num); ofsbuf[i] = buf->i; } @@ -1863,7 +1865,8 @@ pdf_obj_read(fz_context *ctx, pdf_document *doc, fz_off_t *offset, int *nump, pd DEBUGMESS((ctx, "Successfully read object %d @ %d", num, numofs)); } entry->type = 'n'; - entry->gen = 0; + entry->gen = gen; // XXX: was 0 + entry->num = num; entry->ofs = numofs; entry->stm_ofs = stmofs; } @@ -1895,7 +1898,7 @@ pdf_load_hinted_page(fz_context *ctx, pdf_document *doc, int pagenum) fz_try(ctx) { int num = doc->hint_page[pagenum].number; - pdf_obj *page = pdf_load_object(ctx, doc, num, 0); + pdf_obj *page = pdf_load_object(ctx, doc, num); if (pdf_name_eq(ctx, PDF_NAME_Page, pdf_dict_get(ctx, page, PDF_NAME_Type))) { /* We have found the page object! */ @@ -1985,7 +1988,7 @@ read_hinted_object(fz_context *ctx, pdf_document *doc, int num) } pdf_xref_entry * -pdf_cache_object(fz_context *ctx, pdf_document *doc, int num, int gen) +pdf_cache_object(fz_context *ctx, pdf_document *doc, int num) { pdf_xref_entry *x; int rnum, rgen, try_repair; @@ -1993,7 +1996,7 @@ pdf_cache_object(fz_context *ctx, pdf_document *doc, int num, int gen) fz_var(try_repair); if (num <= 0 || num >= pdf_xref_len(ctx, doc)) - fz_throw(ctx, FZ_ERROR_GENERIC, "object out of range (%d %d R); xref size %d", num, gen, pdf_xref_len(ctx, doc)); + fz_throw(ctx, FZ_ERROR_GENERIC, "object out of range (%d 0 R); xref size %d", num, pdf_xref_len(ctx, doc)); object_updated: try_repair = 0; @@ -2029,6 +2032,7 @@ object_updated: x->type = 'f'; x->ofs = -1; x->gen = 0; + x->num = 0; x->stm_ofs = 0; x->obj = NULL; try_repair = (doc->repair_attempted == 0); @@ -2044,25 +2048,25 @@ object_updated: fz_catch(ctx) { if (rnum == num) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot parse object (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot parse object (%d 0 R)", num); else - fz_throw(ctx, FZ_ERROR_GENERIC, "found object (%d %d R) instead of (%d %d R)", rnum, rgen, num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "found object (%d 0 R) instead of (%d 0 R)", rnum, num); } goto object_updated; } if (doc->crypt) - pdf_crypt_obj(ctx, doc->crypt, x->obj, num, gen); + pdf_crypt_obj(ctx, doc->crypt, x->obj, x->num, x->gen); } else if (x->type == 'o') { if (!x->obj) { - x = pdf_load_obj_stm(ctx, doc, x->ofs, 0, &doc->lexbuf.base, num); + x = pdf_load_obj_stm(ctx, doc, x->ofs, &doc->lexbuf.base, num); if (x == NULL) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load object stream containing object (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load object stream containing object (%d 0 R)", num); if (!x->obj) - fz_throw(ctx, FZ_ERROR_GENERIC, "object (%d %d R) was not found in its object stream", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "object (%d 0 R) was not found in its object stream", num); } } else if (doc->hint_obj_offsets && read_hinted_object(ctx, doc, num)) @@ -2071,11 +2075,11 @@ object_updated: } else if (doc->file_length && doc->linear_pos < doc->file_length) { - fz_throw(ctx, FZ_ERROR_TRYLATER, "cannot find object in xref (%d %d R) - not loaded yet?", num, gen); + fz_throw(ctx, FZ_ERROR_TRYLATER, "cannot find object in xref (%d 0 R) - not loaded yet?", num); } else { - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find object in xref (%d %d R)", num, gen); + fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find object in xref (%d 0 R)", num); } pdf_set_obj_parent(ctx, x->obj, num); @@ -2083,9 +2087,9 @@ object_updated: } pdf_obj * -pdf_load_object(fz_context *ctx, pdf_document *doc, int num, int gen) +pdf_load_object(fz_context *ctx, pdf_document *doc, int num) { - pdf_xref_entry *entry = pdf_cache_object(ctx, doc, num, gen); + pdf_xref_entry *entry = pdf_cache_object(ctx, doc, num); assert(entry->obj != NULL); return pdf_keep_obj(ctx, entry->obj); } @@ -2095,7 +2099,6 @@ pdf_resolve_indirect(fz_context *ctx, pdf_obj *ref) { int sanity = 10; int num; - int gen; pdf_xref_entry *entry; while (pdf_is_indirect(ctx, ref)) @@ -2104,7 +2107,7 @@ pdf_resolve_indirect(fz_context *ctx, pdf_obj *ref) if (--sanity == 0) { - fz_warn(ctx, "too many indirections (possible indirection cycle involving %d %d R)", num, gen); + fz_warn(ctx, "too many indirections (possible indirection cycle involving %d 0 R)", num); return NULL; } @@ -2112,22 +2115,21 @@ pdf_resolve_indirect(fz_context *ctx, pdf_obj *ref) if (!doc) return NULL; num = pdf_to_num(ctx, ref); - gen = pdf_to_gen(ctx, ref); - if (num <= 0 || gen < 0) + if (num <= 0) { - fz_warn(ctx, "invalid indirect reference (%d %d R)", num, gen); + fz_warn(ctx, "invalid indirect reference (%d 0 R)", num); return NULL; } fz_try(ctx) { - entry = pdf_cache_object(ctx, doc, num, gen); + entry = pdf_cache_object(ctx, doc, num); } fz_catch(ctx) { fz_rethrow_if(ctx, FZ_ERROR_TRYLATER); - fz_warn(ctx, "cannot load object (%d %d R) into cache", num, gen); + fz_warn(ctx, "cannot load object (%d 0 R) into cache", num); return NULL; } @@ -2155,6 +2157,7 @@ pdf_create_object(fz_context *ctx, pdf_document *doc) entry->type = 'f'; entry->ofs = -1; entry->gen = 0; + entry->num = num; entry->stm_ofs = 0; entry->stm_buf = NULL; entry->obj = NULL; @@ -2180,6 +2183,7 @@ pdf_delete_object(fz_context *ctx, pdf_document *doc, int num) x->type = 'f'; x->ofs = 0; x->gen += 1; + x->num = 0; x->stm_ofs = 0; x->stm_buf = NULL; x->obj = NULL; @@ -2361,7 +2365,7 @@ pdf_open_document(fz_context *ctx, const char *filename) } static void -pdf_load_hints(fz_context *ctx, pdf_document *doc, int objnum, int gennum) +pdf_load_hints(fz_context *ctx, pdf_document *doc, int objnum) { fz_stream *stream = NULL; pdf_obj *dict; @@ -2383,7 +2387,7 @@ pdf_load_hints(fz_context *ctx, pdf_document *doc, int objnum, int gennum) int least_shared_group_len, shared_group_len_num_bits; int max_object_num = pdf_xref_len(ctx, doc); - stream = pdf_open_stream(ctx, doc, objnum, gennum); + stream = pdf_open_stream(ctx, doc, objnum); dict = pdf_get_xref_entry(ctx, doc, objnum)->obj; if (dict == NULL || !pdf_is_dict(ctx, dict)) fz_throw(ctx, FZ_ERROR_GENERIC, "malformed hint object"); @@ -2604,7 +2608,7 @@ pdf_load_hint_object(fz_context *ctx, pdf_document *doc) if (tok != PDF_TOK_OBJ) break; (void)pdf_repair_obj(ctx, doc, buf, &tmpofs, NULL, NULL, NULL, &page, &tmpofs, NULL); - pdf_load_hints(ctx, doc, num, gen); + pdf_load_hints(ctx, doc, num); } } fz_always(ctx) diff --git a/source/tools/murun.c b/source/tools/murun.c index 1f2f5e5f..df0cbdc2 100644 --- a/source/tools/murun.c +++ b/source/tools/murun.c @@ -2914,7 +2914,7 @@ static void ffi_PDFObject_readStream(js_State *J) if (!pdf_is_stream(ctx, obj)) fz_throw(ctx, FZ_ERROR_GENERIC, "not a stream"); pdf = pdf_get_indirect_document(ctx, obj); - buf = pdf_load_stream(ctx, pdf, pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + buf = pdf_load_stream(ctx, pdf, pdf_to_num(ctx, obj)); } fz_catch(ctx) rethrow(J); ffi_pushbuffer(J, buf); @@ -2971,7 +2971,7 @@ static void ffi_PDFObject_readRawStream(js_State *J) if (!pdf_is_stream(ctx, obj)) fz_throw(ctx, FZ_ERROR_GENERIC, "not a stream"); pdf = pdf_get_indirect_document(ctx, obj); - buf = pdf_load_raw_stream(ctx, pdf, pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + buf = pdf_load_raw_stream(ctx, pdf, pdf_to_num(ctx, obj)); } fz_catch(ctx) rethrow(J); ffi_pushbuffer(J, buf); diff --git a/source/tools/pdfextract.c b/source/tools/pdfextract.c index 2a3689c5..79bdf37a 100644 --- a/source/tools/pdfextract.c +++ b/source/tools/pdfextract.c @@ -137,7 +137,7 @@ static void savefont(pdf_obj *dict, int num) return; } - buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, stream), pdf_to_gen(ctx, stream)); + buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, stream)); len = fz_buffer_storage(ctx, buf, &data); fz_try(ctx) { @@ -166,7 +166,7 @@ static void showobject(int num) fz_try(ctx) { - obj = pdf_load_object(ctx, doc, num, 0); + obj = pdf_load_object(ctx, doc, num); if (isimage(obj)) saveimage(num); diff --git a/source/tools/pdfinfo.c b/source/tools/pdfinfo.c index 9331a8bf..193b727f 100644 --- a/source/tools/pdfinfo.c +++ b/source/tools/pdfinfo.c @@ -184,14 +184,14 @@ showglobalinfo(fz_context *ctx, globals *glo) obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info); if (obj) { - fz_printf(ctx, out, "Info object (%d %d R):\n", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fz_printf(ctx, out, "Info object (%d 0 R):\n", pdf_to_num(ctx, obj)); pdf_print_obj(ctx, out, pdf_resolve_indirect(ctx, obj), 1); } obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Encrypt); if (obj) { - fz_printf(ctx, out, "\nEncryption object (%d %d R):\n", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); + fz_printf(ctx, out, "\nEncryption object (%d 0 R):\n", pdf_to_num(ctx, obj)); pdf_print_obj(ctx, out, pdf_resolve_indirect(ctx, obj), 1); } @@ -258,7 +258,7 @@ gatherfonts(fz_context *ctx, globals *glo, int page, pdf_obj *pageref, pdf_obj * fontdict = pdf_dict_get_val(ctx, dict, i); if (!pdf_is_dict(ctx, fontdict)) { - fz_warn(ctx, "not a font dict (%d %d R)", pdf_to_num(ctx, fontdict), pdf_to_gen(ctx, fontdict)); + fz_warn(ctx, "not a font dict (%d 0 R)", pdf_to_num(ctx, fontdict)); continue; } @@ -311,7 +311,7 @@ gatherimages(fz_context *ctx, globals *glo, int page, pdf_obj *pageref, pdf_obj imagedict = pdf_dict_get_val(ctx, dict, i); if (!pdf_is_dict(ctx, imagedict)) { - fz_warn(ctx, "not an image dict (%d %d R)", pdf_to_num(ctx, imagedict), pdf_to_gen(ctx, imagedict)); + fz_warn(ctx, "not an image dict (%d 0 R)", pdf_to_num(ctx, imagedict)); continue; } @@ -382,7 +382,7 @@ gatherforms(fz_context *ctx, globals *glo, int page, pdf_obj *pageref, pdf_obj * xobjdict = pdf_dict_get_val(ctx, dict, i); if (!pdf_is_dict(ctx, xobjdict)) { - fz_warn(ctx, "not a xobject dict (%d %d R)", pdf_to_num(ctx, xobjdict), pdf_to_gen(ctx, xobjdict)); + fz_warn(ctx, "not a xobject dict (%d 0 R)", pdf_to_num(ctx, xobjdict)); continue; } @@ -433,7 +433,7 @@ gatherpsobjs(fz_context *ctx, globals *glo, int page, pdf_obj *pageref, pdf_obj xobjdict = pdf_dict_get_val(ctx, dict, i); if (!pdf_is_dict(ctx, xobjdict)) { - fz_warn(ctx, "not a xobject dict (%d %d R)", pdf_to_num(ctx, xobjdict), pdf_to_gen(ctx, xobjdict)); + fz_warn(ctx, "not a xobject dict (%d 0 R)", pdf_to_num(ctx, xobjdict)); continue; } @@ -475,14 +475,14 @@ gathershadings(fz_context *ctx, globals *glo, int page, pdf_obj *pageref, pdf_ob shade = pdf_dict_get_val(ctx, dict, i); if (!pdf_is_dict(ctx, shade)) { - fz_warn(ctx, "not a shading dict (%d %d R)", pdf_to_num(ctx, shade), pdf_to_gen(ctx, shade)); + fz_warn(ctx, "not a shading dict (%d 0 R)", pdf_to_num(ctx, shade)); continue; } type = pdf_dict_get(ctx, shade, PDF_NAME_ShadingType); if (!pdf_is_int(ctx, type) || pdf_to_int(ctx, type) < 1 || pdf_to_int(ctx, type) > 7) { - fz_warn(ctx, "not a shading type (%d %d R)", pdf_to_num(ctx, shade), pdf_to_gen(ctx, shade)); + fz_warn(ctx, "not a shading type (%d 0 R)", pdf_to_num(ctx, shade)); type = NULL; } @@ -522,14 +522,14 @@ gatherpatterns(fz_context *ctx, globals *glo, int page, pdf_obj *pageref, pdf_ob patterndict = pdf_dict_get_val(ctx, dict, i); if (!pdf_is_dict(ctx, patterndict)) { - fz_warn(ctx, "not a pattern dict (%d %d R)", pdf_to_num(ctx, patterndict), pdf_to_gen(ctx, patterndict)); + fz_warn(ctx, "not a pattern dict (%d 0 R)", pdf_to_num(ctx, patterndict)); continue; } type = pdf_dict_get(ctx, patterndict, PDF_NAME_PatternType); if (!pdf_is_int(ctx, type) || pdf_to_int(ctx, type) < 1 || pdf_to_int(ctx, type) > 2) { - fz_warn(ctx, "not a pattern type (%d %d R)", pdf_to_num(ctx, patterndict), pdf_to_gen(ctx, patterndict)); + fz_warn(ctx, "not a pattern type (%d 0 R)", pdf_to_num(ctx, patterndict)); type = NULL; } @@ -538,14 +538,14 @@ gatherpatterns(fz_context *ctx, globals *glo, int page, pdf_obj *pageref, pdf_ob paint = pdf_dict_get(ctx, patterndict, PDF_NAME_PaintType); if (!pdf_is_int(ctx, paint) || pdf_to_int(ctx, paint) < 1 || pdf_to_int(ctx, paint) > 2) { - fz_warn(ctx, "not a pattern paint type (%d %d R)", pdf_to_num(ctx, patterndict), pdf_to_gen(ctx, patterndict)); + fz_warn(ctx, "not a pattern paint type (%d 0 R)", pdf_to_num(ctx, patterndict)); paint = NULL; } tiling = pdf_dict_get(ctx, patterndict, PDF_NAME_TilingType); if (!pdf_is_int(ctx, tiling) || pdf_to_int(ctx, tiling) < 1 || pdf_to_int(ctx, tiling) > 3) { - fz_warn(ctx, "not a pattern tiling type (%d %d R)", pdf_to_num(ctx, patterndict), pdf_to_gen(ctx, patterndict)); + fz_warn(ctx, "not a pattern tiling type (%d 0 R)", pdf_to_num(ctx, patterndict)); tiling = NULL; } } @@ -674,7 +674,7 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) int j; fz_output *out = glo->out; -#define PAGE_FMT_zu "\t%d\t(%d %d R):\t" +#define PAGE_FMT_zu "\t%d\t(%d 0 R):\t" if (show & DIMENSIONS && glo->dims > 0) { @@ -684,7 +684,6 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) fz_printf(ctx, out, PAGE_FMT_zu "[ %g %g %g %g ]\n", glo->dim[i].page, pdf_to_num(ctx, glo->dim[i].pageref), - pdf_to_gen(ctx, glo->dim[i].pageref), glo->dim[i].u.dim.bbox->x0, glo->dim[i].u.dim.bbox->y0, glo->dim[i].u.dim.bbox->x1, @@ -698,16 +697,14 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) fz_printf(ctx, out, "Fonts (%d):\n", glo->fonts); for (i = 0; i < glo->fonts; i++) { - fz_printf(ctx, out, PAGE_FMT_zu "%s '%s' %s%s(%d %d R)\n", + fz_printf(ctx, out, PAGE_FMT_zu "%s '%s' %s%s(%d 0 R)\n", glo->font[i].page, pdf_to_num(ctx, glo->font[i].pageref), - pdf_to_gen(ctx, glo->font[i].pageref), pdf_to_name(ctx, glo->font[i].u.font.subtype), pdf_to_name(ctx, glo->font[i].u.font.name), glo->font[i].u.font.encoding ? pdf_to_name(ctx, glo->font[i].u.font.encoding) : "", glo->font[i].u.font.encoding ? " " : "", - pdf_to_num(ctx, glo->font[i].u.font.obj), - pdf_to_gen(ctx, glo->font[i].u.font.obj)); + pdf_to_num(ctx, glo->font[i].u.font.obj)); } fz_printf(ctx, out, "\n"); } @@ -722,8 +719,7 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) fz_printf(ctx, out, PAGE_FMT_zu "[ ", glo->image[i].page, - pdf_to_num(ctx, glo->image[i].pageref), - pdf_to_gen(ctx, glo->image[i].pageref)); + pdf_to_num(ctx, glo->image[i].pageref)); if (pdf_is_array(ctx, glo->image[i].u.image.filter)) { @@ -795,15 +791,14 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) fz_strlcpy(altcs, "Sep", 4); } - fz_printf(ctx, out, " ] %dx%d %dbpc %s%s%s (%d %d R)\n", + fz_printf(ctx, out, " ] %dx%d %dbpc %s%s%s (%d 0 R)\n", pdf_to_int(ctx, glo->image[i].u.image.width), pdf_to_int(ctx, glo->image[i].u.image.height), glo->image[i].u.image.bpc ? pdf_to_int(ctx, glo->image[i].u.image.bpc) : 1, glo->image[i].u.image.cs ? cs : "ImageMask", glo->image[i].u.image.altcs ? " " : "", glo->image[i].u.image.altcs ? altcs : "", - pdf_to_num(ctx, glo->image[i].u.image.obj), - pdf_to_gen(ctx, glo->image[i].u.image.obj)); + pdf_to_num(ctx, glo->image[i].u.image.obj)); fz_free(ctx, cs); fz_free(ctx, altcs); @@ -828,13 +823,11 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) "Tensor patch", }; - fz_printf(ctx, out, PAGE_FMT_zu "%s (%d %d R)\n", + fz_printf(ctx, out, PAGE_FMT_zu "%s (%d 0 R)\n", glo->shading[i].page, pdf_to_num(ctx, glo->shading[i].pageref), - pdf_to_gen(ctx, glo->shading[i].pageref), shadingtype[pdf_to_int(ctx, glo->shading[i].u.shading.type)], - pdf_to_num(ctx, glo->shading[i].u.shading.obj), - pdf_to_gen(ctx, glo->shading[i].u.shading.obj)); + pdf_to_num(ctx, glo->shading[i].u.shading.obj)); } fz_printf(ctx, out, "\n"); } @@ -860,25 +853,20 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) "Constant/fast tiling", }; - fz_printf(ctx, out, PAGE_FMT_zu "Tiling %s %s (%d %d R)\n", + fz_printf(ctx, out, PAGE_FMT_zu "Tiling %s %s (%d 0 R)\n", glo->pattern[i].page, pdf_to_num(ctx, glo->pattern[i].pageref), - pdf_to_gen(ctx, glo->pattern[i].pageref), painttype[pdf_to_int(ctx, glo->pattern[i].u.pattern.paint)], tilingtype[pdf_to_int(ctx, glo->pattern[i].u.pattern.tiling)], - pdf_to_num(ctx, glo->pattern[i].u.pattern.obj), - pdf_to_gen(ctx, glo->pattern[i].u.pattern.obj)); + pdf_to_num(ctx, glo->pattern[i].u.pattern.obj)); } else { - fz_printf(ctx, out, PAGE_FMT_zu "Shading %d %d R (%d %d R)\n", + fz_printf(ctx, out, PAGE_FMT_zu "Shading %d 0 R (%d 0 R)\n", glo->pattern[i].page, pdf_to_num(ctx, glo->pattern[i].pageref), - pdf_to_gen(ctx, glo->pattern[i].pageref), pdf_to_num(ctx, glo->pattern[i].u.pattern.shading), - pdf_to_gen(ctx, glo->pattern[i].u.pattern.shading), - pdf_to_num(ctx, glo->pattern[i].u.pattern.obj), - pdf_to_gen(ctx, glo->pattern[i].u.pattern.obj)); + pdf_to_num(ctx, glo->pattern[i].u.pattern.obj)); } } fz_printf(ctx, out, "\n"); @@ -889,16 +877,14 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) fz_printf(ctx, out, "Form xobjects (%d):\n", glo->forms); for (i = 0; i < glo->forms; i++) { - fz_printf(ctx, out, PAGE_FMT_zu "Form%s%s%s%s (%d %d R)\n", + fz_printf(ctx, out, PAGE_FMT_zu "Form%s%s%s%s (%d 0 R)\n", glo->form[i].page, pdf_to_num(ctx, glo->form[i].pageref), - pdf_to_gen(ctx, glo->form[i].pageref), glo->form[i].u.form.groupsubtype ? " " : "", glo->form[i].u.form.groupsubtype ? pdf_to_name(ctx, glo->form[i].u.form.groupsubtype) : "", glo->form[i].u.form.groupsubtype ? " Group" : "", glo->form[i].u.form.reference ? " Reference" : "", - pdf_to_num(ctx, glo->form[i].u.form.obj), - pdf_to_gen(ctx, glo->form[i].u.form.obj)); + pdf_to_num(ctx, glo->form[i].u.form.obj)); } fz_printf(ctx, out, "\n"); } @@ -908,12 +894,10 @@ printinfo(fz_context *ctx, globals *glo, char *filename, int show, int page) fz_printf(ctx, out, "Postscript xobjects (%d):\n", glo->psobjs); for (i = 0; i < glo->psobjs; i++) { - fz_printf(ctx, out, PAGE_FMT_zu "(%d %d R)\n", + fz_printf(ctx, out, PAGE_FMT_zu "(%d 0 R)\n", glo->psobj[i].page, pdf_to_num(ctx, glo->psobj[i].pageref), - pdf_to_gen(ctx, glo->psobj[i].pageref), - pdf_to_num(ctx, glo->psobj[i].u.form.obj), - pdf_to_gen(ctx, glo->psobj[i].u.form.obj)); + pdf_to_num(ctx, glo->psobj[i].u.form.obj)); } fz_printf(ctx, out, "\n"); } diff --git a/source/tools/pdfshow.c b/source/tools/pdfshow.c index d56cbcd6..3ff479a5 100644 --- a/source/tools/pdfshow.c +++ b/source/tools/pdfshow.c @@ -65,7 +65,7 @@ static void showpagetree(void) for (i = 0; i < count; i++) { ref = pdf_lookup_page_obj(ctx, doc, i); - fz_printf(ctx, out, "page %d = %d %d R\n", i + 1, pdf_to_num(ctx, ref), pdf_to_gen(ctx, ref)); + fz_printf(ctx, out, "page %d = %d 0 R\n", i + 1, pdf_to_num(ctx, ref)); } fz_printf(ctx, out, "\n"); } @@ -93,7 +93,7 @@ static void showsafe(unsigned char *buf, size_t n) } } -static void showstream(int num, int gen) +static void showstream(int num) { fz_stream *stm; unsigned char buf[2048]; @@ -102,9 +102,9 @@ static void showstream(int num, int gen) showcolumn = 0; if (showdecode) - stm = pdf_open_stream(ctx, doc, num, gen); + stm = pdf_open_stream(ctx, doc, num); else - stm = pdf_open_raw_stream(ctx, doc, num, gen); + stm = pdf_open_raw_stream(ctx, doc, num); while (1) { @@ -120,34 +120,34 @@ static void showstream(int num, int gen) fz_drop_stream(ctx, stm); } -static void showobject(int num, int gen) +static void showobject(int num) { pdf_obj *obj; if (!doc) fz_throw(ctx, FZ_ERROR_GENERIC, "no file specified"); - obj = pdf_load_object(ctx, doc, num, gen); + obj = pdf_load_object(ctx, doc, num); if (pdf_is_stream(ctx, obj)) { if (showbinary) { - showstream(num, gen); + showstream(num); } else { - fz_printf(ctx, out, "%d %d obj\n", num, gen); + fz_printf(ctx, out, "%d 0 obj\n", num); pdf_print_obj(ctx, out, obj, 0); fz_printf(ctx, out, "\nstream\n"); - showstream(num, gen); + showstream(num); fz_printf(ctx, out, "endstream\n"); fz_printf(ctx, out, "endobj\n\n"); } } else { - fz_printf(ctx, out, "%d %d obj\n", num, gen); + fz_printf(ctx, out, "%d 0 obj\n", num); pdf_print_obj(ctx, out, obj, 0); fz_printf(ctx, out, "\nendobj\n\n"); } @@ -168,7 +168,7 @@ static void showgrep(char *filename) { fz_try(ctx) { - obj = pdf_load_object(ctx, doc, i, 0); + obj = pdf_load_object(ctx, doc, i); } fz_catch(ctx) { @@ -268,7 +268,7 @@ int pdfshow_main(int argc, char **argv) case 'p': showpagetree(); break; case 'g': showgrep(filename); break; case 'o': showoutline(); break; - default: showobject(atoi(argv[fz_optind]), 0); break; + default: showobject(atoi(argv[fz_optind])); break; } fz_optind++; } |