summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/pdf/pdf-annot-edit.c4
-rw-r--r--source/pdf/pdf-annot.c4
-rw-r--r--source/pdf/pdf-appearance.c4
-rw-r--r--source/pdf/pdf-cmap-load.c2
-rw-r--r--source/pdf/pdf-colorspace.c6
-rw-r--r--source/pdf/pdf-crypt.c4
-rw-r--r--source/pdf/pdf-field.c2
-rw-r--r--source/pdf/pdf-font.c9
-rw-r--r--source/pdf/pdf-form.c2
-rw-r--r--source/pdf/pdf-function.c14
-rw-r--r--source/pdf/pdf-graft.c2
-rw-r--r--source/pdf/pdf-image.c9
-rw-r--r--source/pdf/pdf-interpret.c5
-rw-r--r--source/pdf/pdf-parse.c2
-rw-r--r--source/pdf/pdf-repair.c22
-rw-r--r--source/pdf/pdf-resources.c2
-rw-r--r--source/pdf/pdf-shade.c14
-rw-r--r--source/pdf/pdf-store.c7
-rw-r--r--source/pdf/pdf-stream.c111
-rw-r--r--source/pdf/pdf-type3.c2
-rw-r--r--source/pdf/pdf-write.c41
-rw-r--r--source/pdf/pdf-xref.c82
-rw-r--r--source/tools/murun.c4
-rw-r--r--source/tools/pdfextract.c4
-rw-r--r--source/tools/pdfinfo.c72
-rw-r--r--source/tools/pdfshow.c24
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++;
}