From 3f3dbe22eaae56df48af304c35a1c0b5dd976135 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Thu, 22 Aug 2019 13:20:36 -0400 Subject: Remove array null flattening For some reason, qpdf from the beginning was replacing indirect references to null with literal null in arrays even after removing the old behavior of flattening scalar references. This seems like a bad idea. --- ChangeLog | 5 ++ libqpdf/QPDFWriter.cc | 8 +--- qpdf/qpdf.testcov | 1 - qpdf/qtest/qpdf/dangling-refs-dangling-out.pdf | Bin 893 -> 934 bytes qpdf/qtest/qpdf/merge-three-files-1.pdf | Bin 8396 -> 8699 bytes qpdf/qtest/qpdf/three-files-collate-out.pdf | 62 ++++++++++++++++--------- 6 files changed, 46 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index d52a51b4..801cf03b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2019-08-22 Jay Berkenbilt + + * Stop replacing indirect references to null with literal null in + arrays when writing output with QPDFWriter. + 2019-08-19 Jay Berkenbilt * Accept (and warn for) extraneous whitespace preceding the xref diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 2df18452..6c92338d 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -2390,13 +2390,7 @@ QPDFWriter::prepareFileForWrite() for (int i = 0; i < nitems; ++i) { QPDFObjectHandle oh = node.getArrayItem(i); - if (oh.isIndirect() && oh.isNull()) - { - QTC::TC("qpdf", "QPDFWriter flatten array null"); - oh.makeDirect(); - node.setArrayItem(i, oh); - } - else if (! oh.isScalar()) + if (! oh.isScalar()) { queue.push_back(oh); } diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index f1acee76..e8e5bf3e 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -27,7 +27,6 @@ QPDF lin outlines in part 1 QPDF lin nshared_total > nshared_first_page 1 QPDF lin part 8 empty 1 QPDF lin check shared past first page 0 -QPDFWriter flatten array null 0 main QTest implicit 0 main QTest indirect 1 main QTest null 0 diff --git a/qpdf/qtest/qpdf/dangling-refs-dangling-out.pdf b/qpdf/qtest/qpdf/dangling-refs-dangling-out.pdf index 96f81068..8ca87ebe 100644 Binary files a/qpdf/qtest/qpdf/dangling-refs-dangling-out.pdf and b/qpdf/qtest/qpdf/dangling-refs-dangling-out.pdf differ diff --git a/qpdf/qtest/qpdf/merge-three-files-1.pdf b/qpdf/qtest/qpdf/merge-three-files-1.pdf index d90b97d7..42e84a22 100644 Binary files a/qpdf/qtest/qpdf/merge-three-files-1.pdf and b/qpdf/qtest/qpdf/merge-three-files-1.pdf differ diff --git a/qpdf/qtest/qpdf/three-files-collate-out.pdf b/qpdf/qtest/qpdf/three-files-collate-out.pdf index f6fe42f9..36b1c8d0 100644 --- a/qpdf/qtest/qpdf/three-files-collate-out.pdf +++ b/qpdf/qtest/qpdf/three-files-collate-out.pdf @@ -775,12 +775,12 @@ endobj << /Count -2 /Dest [ - null + 57 0 R /FitV 100 ] - /First 57 0 R - /Last 58 0 R + /First 58 0 R + /Last 59 0 R /Next 54 0 R /Parent 19 0 R /Title (Isosicle 1.1.1 -> 12: /FitV 100) @@ -793,14 +793,14 @@ endobj << /Count 1 /Dest [ - null + 57 0 R /XYZ null null null ] - /First 59 0 R - /Last 59 0 R + /First 60 0 R + /Last 60 0 R /Parent 19 0 R /Prev 53 0 R /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) @@ -843,17 +843,22 @@ endobj >> endobj -%% Original object ID: 44 0 +%% Original object ID: 12 0 57 0 obj +null +endobj + +%% Original object ID: 44 0 +58 0 obj << /Dest [ - null + 61 0 R /XYZ null null null ] - /Next 58 0 R + /Next 59 0 R /Parent 53 0 R /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) /Type /Outline @@ -861,7 +866,7 @@ endobj endobj %% Original object ID: 45 0 -58 0 obj +59 0 obj << /Dest [ null @@ -871,17 +876,17 @@ endobj null ] /Parent 53 0 R - /Prev 57 0 R + /Prev 58 0 R /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) /Type /Outline >> endobj %% Original object ID: 46 0 -59 0 obj +60 0 obj << /Dest [ - null + 62 0 R /XYZ null null @@ -893,8 +898,18 @@ endobj >> endobj +%% Original object ID: 15 0 +61 0 obj +null +endobj + +%% Original object ID: 17 0 +62 0 obj +null +endobj + xref -0 60 +0 63 0000000000 65535 f 0000000052 00000 n 0000000853 00000 n @@ -949,17 +964,20 @@ xref 0000007949 00000 n 0000008052 00000 n 0000008100 00000 n -0000008327 00000 n -0000008581 00000 n -0000008801 00000 n -0000009014 00000 n -0000009228 00000 n -0000009442 00000 n +0000008329 00000 n +0000008585 00000 n +0000008805 00000 n +0000009018 00000 n +0000009068 00000 n +0000009284 00000 n +0000009498 00000 n +0000009699 00000 n +0000009749 00000 n trailer << /Root 1 0 R - /Size 60 + /Size 63 /ID [<31415926535897932384626433832795>] >> startxref -9613 +9771 %%EOF -- cgit v1.2.3-54-g00ecf