1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-11-26 01:32:48 +02:00

eeshow/gfx/pdftoc.c (write_trailer): walking pointer is a bad idea if we realloc

This commit is contained in:
Werner Almesberger 2016-08-22 23:19:10 -03:00
parent 82f578d4b4
commit cdb68f70a2

View File

@ -248,9 +248,9 @@ static void write_trailer(struct pdftoc *ctx)
{ {
unsigned n = ctx->top + 1; unsigned n = ctx->top + 1;
const struct object *obj = ctx->objs; const struct object *obj = ctx->objs;
const struct object *end = ctx->objs + ctx->top + 1;
const struct title *t; const struct title *t;
unsigned outline, tail; unsigned outline, tail;
int i;
/* Outline root */ /* Outline root */
@ -267,10 +267,12 @@ static void write_trailer(struct pdftoc *ctx)
/* Outline items */ /* Outline items */
n++; n++;
i = 0;
for (t = ctx->titles; t; t = t->next) { for (t = ctx->titles; t; t = t->next) {
while (!obj->is_page) { assert(i <= ctx->top);
assert(obj != end); while (!ctx->objs[i].is_page) {
obj++; i++;
assert(i <= ctx->top);
} }
add_object(ctx, n, 0, ctx->pos + tail); add_object(ctx, n, 0, ctx->pos + tail);
tail += fprintf(ctx->file, tail += fprintf(ctx->file,
@ -285,11 +287,11 @@ static void write_trailer(struct pdftoc *ctx)
tail += fprintf(ctx->file, tail += fprintf(ctx->file,
" /Next %u 0 R\n", n + 1); " /Next %u 0 R\n", n + 1);
tail += fprintf(ctx->file, tail += fprintf(ctx->file,
" /Dest [%u %u R /Fit]\n" " /Dest [%d %u R /Fit]\n"
">>\nendobj\n", ">>\nendobj\n",
(unsigned) (obj - ctx->objs), obj->gen); i, ctx->objs[i].gen);
n++; n++;
obj++; i++;
} }
/* xref table */ /* xref table */