summaryrefslogtreecommitdiff
path: root/Build/source/texk/xdvipdfmx/src/pdfobj.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/xdvipdfmx/src/pdfobj.c')
-rw-r--r--Build/source/texk/xdvipdfmx/src/pdfobj.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/Build/source/texk/xdvipdfmx/src/pdfobj.c b/Build/source/texk/xdvipdfmx/src/pdfobj.c
index b04ad418ea7..8119c64dab2 100644
--- a/Build/source/texk/xdvipdfmx/src/pdfobj.c
+++ b/Build/source/texk/xdvipdfmx/src/pdfobj.c
@@ -559,7 +559,7 @@ void pdf_out (FILE *file, const void *buffer, long length)
pdf_output_line_position += length;
/* "foo\nbar\n "... */
if (length > 0 &&
- ((char *)buffer)[length-1] == '\n')
+ ((const char *)buffer)[length-1] == '\n')
pdf_output_line_position = 0;
}
}
@@ -2243,7 +2243,8 @@ find_xref (FILE *pdf_input_file)
mfgets(work_buffer, WORK_BUFFER_SIZE, pdf_input_file);
{
- char *start, *end, *number;
+ const char *start, *end;
+ char *number;
start = work_buffer;
end = start + strlen(work_buffer);
@@ -2275,7 +2276,7 @@ parse_trailer (pdf_file *pf)
WARN("buffer:\n->%s<-\n", work_buffer);
result = NULL;
} else {
- char *p = work_buffer + strlen("trailer");
+ const char *p = work_buffer + strlen("trailer");
skip_white(&p, work_buffer + WORK_BUFFER_SIZE);
result = parse_pdf_dict(&p, work_buffer + WORK_BUFFER_SIZE, pf);
}
@@ -2335,7 +2336,8 @@ pdf_read_object (unsigned long obj_num, unsigned short obj_gen,
pdf_file *pf, long offset, long limit)
{
long length;
- char *buffer, *p, *endptr;
+ char *buffer;
+ const char *p, *endptr;
pdf_obj *result;
length = limit - offset;
@@ -2353,7 +2355,7 @@ pdf_read_object (unsigned long obj_num, unsigned short obj_gen,
/* Check for obj_num and obj_gen */
{
- char *q = p; /* <== p */
+ const char *q = p; /* <== p */
char *sp;
unsigned long n, g;
@@ -2412,7 +2414,8 @@ read_objstm (pdf_file *pf, unsigned long num)
unsigned long offset = pf->xref_table[num].field2;
unsigned short gen = pf->xref_table[num].field3;
long limit = next_object_offset(pf, num), n, first, *header = NULL;
- char *data, data1, *p, *q;
+ char *data = NULL, *q;
+ const char *p, *endptr;
int i;
pdf_obj *objstm, *dict, *type, *n_obj, *first_obj;
@@ -2455,13 +2458,13 @@ read_objstm (pdf_file *pf, unsigned long num)
*(header++) = n;
*(header++) = first;
- data = (char *) pdf_stream_dataptr(objstm);
-
- /* hack to avoid parsing beyond offset table */
- data1 = data[first];
+ /* avoid parsing beyond offset table */
+ data = NEW(first + 1, char);
+ memcpy(data, pdf_stream_dataptr(objstm), first);
data[first] = 0;
- p = data;
+ p = data;
+ endptr = p + first;
i = 2*n;
while (i--) {
*(header++) = strtoul(p, &q, 10);
@@ -2469,17 +2472,19 @@ read_objstm (pdf_file *pf, unsigned long num)
goto error;
p = q;
}
- data[first] = data1;
/* Any garbage after last entry? */
- skip_white(&p, data+first);
- if (p != data+first)
+ skip_white(&p, endptr);
+ if (p != endptr)
goto error;
+ RELEASE(data);
return pf->xref_table[num].direct = objstm;
error:
WARN("Cannot parse object stream.");
+ if (data)
+ RELEASE(data);
if (objstm)
pdf_release_obj(objstm);
return NULL;
@@ -2517,7 +2522,7 @@ pdf_get_object (pdf_file *pf, unsigned long obj_num, unsigned short obj_gen)
unsigned short index = pf->xref_table[obj_num].field3;
pdf_obj *objstm;
long *data, n, first, length;
- char *p, *q;
+ const char *p, *q;
if (objstm_num >= pf->num_obj ||
pf->xref_table[objstm_num].type != 1 ||
@@ -2533,7 +2538,7 @@ pdf_get_object (pdf_file *pf, unsigned long obj_num, unsigned short obj_gen)
goto error;
length = pdf_stream_length(objstm);
- p = (char *) pdf_stream_dataptr(objstm) + first + data[2*index+1];
+ p = (const char *) pdf_stream_dataptr(objstm) + first + data[2*index+1];
q = p + (index == n-1 ? length : first+data[2*index+3]);
result = parse_pdf_object(&p, q, pf);
if (!result)
@@ -2779,12 +2784,12 @@ parse_xref_stream (pdf_file *pf, long xref_pos, pdf_obj **trailer)
i = 0;
while (i < index_len) {
pdf_obj *first = pdf_get_array(index, i++);
- pdf_obj *size = pdf_get_array(index, i++);
+ size_obj = pdf_get_array(index, i++);
if (!PDF_OBJ_NUMBERTYPE(first) ||
- !PDF_OBJ_NUMBERTYPE(size) ||
+ !PDF_OBJ_NUMBERTYPE(size_obj) ||
parse_xrefstm_subsec(pf, &p, &length, W, wsum,
(long) pdf_number_value(first),
- (long) pdf_number_value(size)))
+ (long) pdf_number_value(size_obj)))
goto error;
}
} else if (parse_xrefstm_subsec(pf, &p, &length, W, wsum, 0, size))