diff options
author | Jay Berkenbilt <ejb@ql.org> | 2024-01-12 13:11:46 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2024-01-12 14:05:22 +0100 |
commit | ebb10f3256067c6e4ebea9a21a92d0199ac7fdf9 (patch) | |
tree | 5e1d6152bd2cf05f0c0a52e1467cea4dc88df3df /qpdf | |
parent | 2c97aaddd50aacd849bd9d97102d21275fde94a2 (diff) | |
download | qpdf-ebb10f3256067c6e4ebea9a21a92d0199ac7fdf9.tar.zst |
Fix null pointer issue on array copy
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qpdf.testcov | 1 | ||||
-rw-r--r-- | qpdf/qtest/many-nulls.test | 6 | ||||
-rw-r--r-- | qpdf/test_driver.cc | 12 |
3 files changed, 17 insertions, 2 deletions
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index 397cbf97..6d0f8a4b 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -692,3 +692,4 @@ QPDF recover xref stream 0 QPDFJob misplaced page range 0 QPDFJob duplicated range 0 QPDFJob json over/under no file 0 +QPDF_Array copy 1 diff --git a/qpdf/qtest/many-nulls.test b/qpdf/qtest/many-nulls.test index 744075f0..8a723d53 100644 --- a/qpdf/qtest/many-nulls.test +++ b/qpdf/qtest/many-nulls.test @@ -29,5 +29,9 @@ $td->runtest("run check file", {$td->COMMAND => "qpdf --check a.pdf"}, {$td->FILE => "many-nulls.out", $td->EXIT_STATUS => 0}, $td->NORMALIZE_NEWLINES); +$td->runtest("copy sparse array", + {$td->COMMAND => "test_driver 97 many-nulls.pdf"}, + {$td->STRING => "test 97 done\n", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); cleanup(); -$td->report(3); +$td->report(4); diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc index 2b8eb761..472a96a1 100644 --- a/qpdf/test_driver.cc +++ b/qpdf/test_driver.cc @@ -3366,6 +3366,16 @@ test_96(QPDF& pdf, char const* arg2) assert(s.unparseBinary() == "<abc0>"); } +static void +test_97(QPDF& pdf, char const* arg2) +{ + // Shallow array copy. This test uses many-nulls.pdf. + auto nulls = pdf.getTrailer().getKey("/Nulls").getArrayItem(0); + assert(nulls.isArray() && nulls.getArrayNItems() > 10000); + auto nulls2 = nulls.shallowCopy(); + assert(nulls.unparse() == nulls2.unparse()); +} + void runtest(int n, char const* filename1, char const* arg2) { @@ -3467,7 +3477,7 @@ runtest(int n, char const* filename1, char const* arg2) {78, test_78}, {79, test_79}, {80, test_80}, {81, test_81}, {82, test_82}, {83, test_83}, {84, test_84}, {85, test_85}, {86, test_86}, {87, test_87}, {88, test_88}, {89, test_89}, {90, test_90}, {91, test_91}, {92, test_92}, {93, test_93}, {94, test_94}, {95, test_95}, - {96, test_96}}; + {96, test_96}, {97, test_97}}; auto fn = test_functions.find(n); if (fn == test_functions.end()) { |