aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGE.md1
-rw-r--r--src/cnki_pdf.c12
2 files changed, 8 insertions, 5 deletions
diff --git a/CHANGE.md b/CHANGE.md
index c4ce375..a832777 100644
--- a/CHANGE.md
+++ b/CHANGE.md
@@ -1,6 +1,7 @@
0.3.0 (2023-XX-XX)
==================
+* Handle missing but referenced root object.
* Support JPEG 2000 for HN.
* Support HN figure placement.
* Support HN text overlay.
diff --git a/src/cnki_pdf.c b/src/cnki_pdf.c
index 887e5f4..502a0ce 100644
--- a/src/cnki_pdf.c
+++ b/src/cnki_pdf.c
@@ -309,7 +309,9 @@ cnki_pdf(cnki_t **param)
if (parent_missing[i] == 1)
root_kid++;
- if (root_kid <= 1) {
+ if (root_kid > 1) {
+ root = pdf_get_free_id(&pdf);
+ } else {
if (root_kid == 0) {
for (int i = 1; i <= parent[0]; i++)
if (root == 0 || root < parent[i])
@@ -323,15 +325,15 @@ cnki_pdf(cnki_t **param)
if ((*param)->stat > 0)
printf("Root object is %d.\n",
root);
- } else {
+ }
+
+ if (pdf_get_kid_count(&pdf, root) == 0) {
if ((*param)->stat > 0)
printf("Root object is missing\n");
if ((*param)->stat > 1)
printf("Generating root object\n");
- root = pdf_get_free_id(&pdf);
-
snprintf(buf, 64,
"<<\n/Type /Pages\n/Kids ");
strcat(dictionary, buf);
@@ -886,7 +888,7 @@ cnki_pdf_hn(cnki_t **param)
free(dictionary);
}
- dictionary_size = 64 + 128 * ptr->image_length;
+ dictionary_size = 128 + 128 * ptr->image_length;
dictionary = malloc(dictionary_size);
if (dictionary == NULL) {