aboutsummaryrefslogtreecommitdiffstats
path: root/src/pdf_parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdf_parser.c')
-rw-r--r--src/pdf_parser.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/pdf_parser.c b/src/pdf_parser.c
index 781bafa..ed7bfba 100644
--- a/src/pdf_parser.c
+++ b/src/pdf_parser.c
@@ -183,7 +183,7 @@ pdf_load(pdf_object_t **pdf, FILE **fp, int size_buf)
ptr->size - (tail - buf) - 3,
">>", 2)) != NULL &&
memmem(tail + 3,
- ptr->size - (tail - buf) - 3,
+ (tmp - tail) - 3,
"stream\r\n", 8) == NULL)
tail = tmp;
@@ -226,8 +226,27 @@ pdf_load(pdf_object_t **pdf, FILE **fp, int size_buf)
free(buf);
} else {
- ptr->object_size = ptr->size;
- ptr->object = buf;
+ /* Handle incomplete object */
+ head = buf;
+ while ((tmp = _memmem_whitespace(head,
+ ptr->size - (head - buf),
+ " 0 obj", 6)) != NULL)
+ head = tmp + 7;
+
+ if (head - buf > 0) {
+ ptr->object_size = ptr->size - (head - buf);
+ ptr->object = malloc(ptr->object_size);
+
+ if (ptr->object == NULL)
+ return 1;
+
+ memcpy(ptr->object, head, ptr->object_size);
+
+ free(buf);
+ } else {
+ ptr->object_size = ptr->size;
+ ptr->object = buf;
+ }
}
ptr = ptr->next;