Skip to content

Commit

Permalink
Merge pull request qpdf#1035 from m-holger/fix
Browse files Browse the repository at this point in the history
  • Loading branch information
jberkenbilt authored Sep 5, 2023
2 parents 8fac58c + fb504ce commit 105093a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 12 deletions.
22 changes: 11 additions & 11 deletions libqpdf/QPDF.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2058,27 +2058,27 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top)

if (foreign.isIndirect()) {
QPDFObjGen foreign_og(foreign.getObjGen());
if (obj_copier.object_map.count(foreign_og) > 0) {
QTC::TC("qpdf", "QPDF already reserved object");
if (obj_copier.visiting.count(foreign_og)) {
QTC::TC("qpdf", "QPDF loop reserving objects");
}
return;
}
if (!obj_copier.visiting.add(foreign_og)) {
QTC::TC("qpdf", "QPDF loop reserving objects");
return;
}
QTC::TC("qpdf", "QPDF copy indirect");
if (obj_copier.object_map.count(foreign_og) == 0) {
if (obj_copier.object_map.count(foreign_og) > 0) {
QTC::TC("qpdf", "QPDF already reserved object");
if (!(top && foreign.isPageObject() && obj_copier.object_map[foreign_og].isNull())) {
obj_copier.visiting.erase(foreign);
return;
}
} else {
QTC::TC("qpdf", "QPDF copy indirect");
obj_copier.object_map[foreign_og] =
foreign.isStream() ? newStream() : newIndirectNull();
if ((!top) && foreign.isPageObject()) {
QTC::TC("qpdf", "QPDF not crossing page boundary");
obj_copier.visiting.erase(foreign);
obj_copier.visiting.erase(foreign_og);
return;
}
obj_copier.to_copy.push_back(foreign);
}
obj_copier.to_copy.push_back(foreign);
}

if (foreign_tc == ::ot_array) {
Expand Down
11 changes: 10 additions & 1 deletion qpdf/qtest/copy-annotations.test
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ cleanup();

my $td = new TestDriver('copy-annotations');

my $n_tests = 43;
my $n_tests = 45;

$td->runtest("complex copy annotations",
{$td->COMMAND =>
Expand Down Expand Up @@ -206,5 +206,14 @@ $td->runtest("check output",
{$td->FILE => "split-out-1.pdf"},
{$td->FILE => "direct-dr-out.pdf"});

$td->runtest("Foreign link annotations",
{$td->COMMAND =>
"qpdf --empty --pages link-annots.pdf -- --qdf --static-id --no-original-object-ids a.pdf"},
{$td->STRING => "", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check output",
{$td->FILE => "link-annots.pdf"},
{$td->FILE => "a.pdf"});

cleanup();
$td->report($n_tests);
Binary file added qpdf/qtest/qpdf/link-annots.pdf
Binary file not shown.

0 comments on commit 105093a

Please sign in to comment.