Commit fb504ce913b49399b7a1243dc53bc2dd6977fae8

Authored by m-holger
1 parent 8fac58cd

Fix #1028

libqpdf/QPDF.cc
... ... @@ -2058,27 +2058,27 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top)
2058 2058  
2059 2059 if (foreign.isIndirect()) {
2060 2060 QPDFObjGen foreign_og(foreign.getObjGen());
2061   - if (obj_copier.object_map.count(foreign_og) > 0) {
2062   - QTC::TC("qpdf", "QPDF already reserved object");
2063   - if (obj_copier.visiting.count(foreign_og)) {
2064   - QTC::TC("qpdf", "QPDF loop reserving objects");
2065   - }
2066   - return;
2067   - }
2068 2061 if (!obj_copier.visiting.add(foreign_og)) {
  2062 + QTC::TC("qpdf", "QPDF loop reserving objects");
2069 2063 return;
2070 2064 }
2071   - QTC::TC("qpdf", "QPDF copy indirect");
2072   - if (obj_copier.object_map.count(foreign_og) == 0) {
  2065 + if (obj_copier.object_map.count(foreign_og) > 0) {
  2066 + QTC::TC("qpdf", "QPDF already reserved object");
  2067 + if (!(top && foreign.isPageObject() && obj_copier.object_map[foreign_og].isNull())) {
  2068 + obj_copier.visiting.erase(foreign);
  2069 + return;
  2070 + }
  2071 + } else {
  2072 + QTC::TC("qpdf", "QPDF copy indirect");
2073 2073 obj_copier.object_map[foreign_og] =
2074 2074 foreign.isStream() ? newStream() : newIndirectNull();
2075 2075 if ((!top) && foreign.isPageObject()) {
2076 2076 QTC::TC("qpdf", "QPDF not crossing page boundary");
2077   - obj_copier.visiting.erase(foreign);
  2077 + obj_copier.visiting.erase(foreign_og);
2078 2078 return;
2079 2079 }
2080   - obj_copier.to_copy.push_back(foreign);
2081 2080 }
  2081 + obj_copier.to_copy.push_back(foreign);
2082 2082 }
2083 2083  
2084 2084 if (foreign_tc == ::ot_array) {
... ...
qpdf/qtest/copy-annotations.test
... ... @@ -14,7 +14,7 @@ cleanup();
14 14  
15 15 my $td = new TestDriver('copy-annotations');
16 16  
17   -my $n_tests = 43;
  17 +my $n_tests = 45;
18 18  
19 19 $td->runtest("complex copy annotations",
20 20 {$td->COMMAND =>
... ... @@ -206,5 +206,14 @@ $td->runtest("check output",
206 206 {$td->FILE => "split-out-1.pdf"},
207 207 {$td->FILE => "direct-dr-out.pdf"});
208 208  
  209 +$td->runtest("Foreign link annotations",
  210 + {$td->COMMAND =>
  211 + "qpdf --empty --pages link-annots.pdf -- --qdf --static-id --no-original-object-ids a.pdf"},
  212 + {$td->STRING => "", $td->EXIT_STATUS => 0},
  213 + $td->NORMALIZE_NEWLINES);
  214 +$td->runtest("check output",
  215 + {$td->FILE => "link-annots.pdf"},
  216 + {$td->FILE => "a.pdf"});
  217 +
209 218 cleanup();
210 219 $td->report($n_tests);
... ...
qpdf/qtest/qpdf/link-annots.pdf 0 → 100644
  1 +%PDF-1.6
  2 +%¿÷¢þ
  3 +%QDF-1.0
  4 +
  5 +1 0 obj
  6 +<<
  7 + /Pages 2 0 R
  8 + /Type /Catalog
  9 +>>
  10 +endobj
  11 +
  12 +2 0 obj
  13 +<<
  14 + /Count 4
  15 + /Kids [
  16 + 3 0 R
  17 + 4 0 R
  18 + 5 0 R
  19 + 6 0 R
  20 + ]
  21 + /Type /Pages
  22 +>>
  23 +endobj
  24 +
  25 +%% Page 1
  26 +3 0 obj
  27 +<<
  28 + /Annots [
  29 + 7 0 R
  30 + 8 0 R
  31 + 9 0 R
  32 + 10 0 R
  33 + ]
  34 + /Contents 11 0 R
  35 + /Group <<
  36 + /CS /DeviceRGB
  37 + /I true
  38 + /S /Transparency
  39 + >>
  40 + /MediaBox [
  41 + 0
  42 + 0
  43 + 612
  44 + 792
  45 + ]
  46 + /Parent 2 0 R
  47 + /Resources <<
  48 + /Font <<
  49 + /F2 13 0 R
  50 + >>
  51 + /ProcSet [
  52 + /PDF
  53 + /Text
  54 + ]
  55 + >>
  56 + /Type /Page
  57 +>>
  58 +endobj
  59 +
  60 +%% Page 2
  61 +4 0 obj
  62 +<<
  63 + /Annots [
  64 + 14 0 R
  65 + 15 0 R
  66 + 16 0 R
  67 + 17 0 R
  68 + ]
  69 + /Contents 18 0 R
  70 + /Group <<
  71 + /CS /DeviceRGB
  72 + /I true
  73 + /S /Transparency
  74 + >>
  75 + /MediaBox [
  76 + 0
  77 + 0
  78 + 612
  79 + 792
  80 + ]
  81 + /Parent 2 0 R
  82 + /Resources <<
  83 + /Font <<
  84 + /F2 13 0 R
  85 + >>
  86 + /ProcSet [
  87 + /PDF
  88 + /Text
  89 + ]
  90 + >>
  91 + /Type /Page
  92 +>>
  93 +endobj
  94 +
  95 +%% Page 3
  96 +5 0 obj
  97 +<<
  98 + /Annots [
  99 + 20 0 R
  100 + 21 0 R
  101 + 22 0 R
  102 + 23 0 R
  103 + ]
  104 + /Contents 24 0 R
  105 + /Group <<
  106 + /CS /DeviceRGB
  107 + /I true
  108 + /S /Transparency
  109 + >>
  110 + /MediaBox [
  111 + 0
  112 + 0
  113 + 612
  114 + 792
  115 + ]
  116 + /Parent 2 0 R
  117 + /Resources <<
  118 + /Font <<
  119 + /F2 13 0 R
  120 + >>
  121 + /ProcSet [
  122 + /PDF
  123 + /Text
  124 + ]
  125 + >>
  126 + /Type /Page
  127 +>>
  128 +endobj
  129 +
  130 +%% Page 4
  131 +6 0 obj
  132 +<<
  133 + /Annots [
  134 + 26 0 R
  135 + 27 0 R
  136 + 28 0 R
  137 + 29 0 R
  138 + ]
  139 + /Contents 30 0 R
  140 + /Group <<
  141 + /CS /DeviceRGB
  142 + /I true
  143 + /S /Transparency
  144 + >>
  145 + /MediaBox [
  146 + 0
  147 + 0
  148 + 612
  149 + 792
  150 + ]
  151 + /Parent 2 0 R
  152 + /Resources <<
  153 + /Font <<
  154 + /F2 13 0 R
  155 + >>
  156 + /ProcSet [
  157 + /PDF
  158 + /Text
  159 + ]
  160 + >>
  161 + /Type /Page
  162 +>>
  163 +endobj
  164 +
  165 +7 0 obj
  166 +<<
  167 + /Border [
  168 + 0
  169 + 0
  170 + 0
  171 + ]
  172 + /Dest [
  173 + 3 0 R
  174 + /XYZ
  175 + 56.7
  176 + 773.189
  177 + 0
  178 + ]
  179 + /Rect [
  180 + 54
  181 + 695
  182 + 100
  183 + 708
  184 + ]
  185 + /Subtype /Link
  186 + /Type /Annot
  187 +>>
  188 +endobj
  189 +
  190 +8 0 obj
  191 +<<
  192 + /Border [
  193 + 0
  194 + 0
  195 + 0
  196 + ]
  197 + /Dest [
  198 + 4 0 R
  199 + /XYZ
  200 + 56.7
  201 + 773.189
  202 + 0
  203 + ]
  204 + /Rect [
  205 + 54
  206 + 645
  207 + 100
  208 + 658
  209 + ]
  210 + /Subtype /Link
  211 + /Type /Annot
  212 +>>
  213 +endobj
  214 +
  215 +9 0 obj
  216 +<<
  217 + /Border [
  218 + 0
  219 + 0
  220 + 0
  221 + ]
  222 + /Dest [
  223 + 5 0 R
  224 + /XYZ
  225 + 56.7
  226 + 773.189
  227 + 0
  228 + ]
  229 + /Rect [
  230 + 54
  231 + 595
  232 + 100
  233 + 608
  234 + ]
  235 + /Subtype /Link
  236 + /Type /Annot
  237 +>>
  238 +endobj
  239 +
  240 +10 0 obj
  241 +<<
  242 + /Border [
  243 + 0
  244 + 0
  245 + 0
  246 + ]
  247 + /Dest [
  248 + 6 0 R
  249 + /XYZ
  250 + 56.7
  251 + 773.189
  252 + 0
  253 + ]
  254 + /Rect [
  255 + 54
  256 + 545
  257 + 100
  258 + 558
  259 + ]
  260 + /Subtype /Link
  261 + /Type /Annot
  262 +>>
  263 +endobj
  264 +
  265 +%% Contents for page 1
  266 +11 0 obj
  267 +<<
  268 + /Length 12 0 R
  269 +>>
  270 +stream
  271 +0.1 w
  272 +
  273 +q 0 0 0 rg
  274 +BT
  275 +55 750 Td /F2 18 Tf (Page 1) Tj
  276 +ET
  277 +Q
  278 +
  279 +q 0 0 0.5019607843 rg
  280 +BT
  281 +55 700 Td /F2 12 Tf (Page 1) Tj
  282 +ET
  283 +Q
  284 +
  285 +q 0 0 0.5019607843 rg
  286 +BT
  287 +55 650 Td /F2 12 Tf (Page 2) Tj
  288 +ET
  289 +Q
  290 +
  291 +q 0 0 0.5019607843 rg
  292 +BT
  293 +55 600 Td /F2 12 Tf (Page 3) Tj
  294 +ET
  295 +Q
  296 +
  297 +q 0 0 0.5019607843 rg
  298 +BT
  299 +55 550 Td /F2 12 Tf (Page 4) Tj
  300 +ET
  301 +Q
  302 +endstream
  303 +endobj
  304 +
  305 +12 0 obj
  306 +314
  307 +endobj
  308 +
  309 +13 0 obj
  310 +<<
  311 + /BaseFont /Courier
  312 + /Subtype /TrueType
  313 + /Type /Font
  314 +>>
  315 +endobj
  316 +
  317 +14 0 obj
  318 +<<
  319 + /Border [
  320 + 0
  321 + 0
  322 + 0
  323 + ]
  324 + /Dest [
  325 + 3 0 R
  326 + /XYZ
  327 + 56.7
  328 + 773.189
  329 + 0
  330 + ]
  331 + /Rect [
  332 + 54
  333 + 695
  334 + 100
  335 + 708
  336 + ]
  337 + /Subtype /Link
  338 + /Type /Annot
  339 +>>
  340 +endobj
  341 +
  342 +15 0 obj
  343 +<<
  344 + /Border [
  345 + 0
  346 + 0
  347 + 0
  348 + ]
  349 + /Dest [
  350 + 4 0 R
  351 + /XYZ
  352 + 56.7
  353 + 773.189
  354 + 0
  355 + ]
  356 + /Rect [
  357 + 54
  358 + 645
  359 + 100
  360 + 658
  361 + ]
  362 + /Subtype /Link
  363 + /Type /Annot
  364 +>>
  365 +endobj
  366 +
  367 +16 0 obj
  368 +<<
  369 + /Border [
  370 + 0
  371 + 0
  372 + 0
  373 + ]
  374 + /Dest [
  375 + 5 0 R
  376 + /XYZ
  377 + 56.7
  378 + 773.189
  379 + 0
  380 + ]
  381 + /Rect [
  382 + 54
  383 + 595
  384 + 100
  385 + 608
  386 + ]
  387 + /Subtype /Link
  388 + /Type /Annot
  389 +>>
  390 +endobj
  391 +
  392 +17 0 obj
  393 +<<
  394 + /Border [
  395 + 0
  396 + 0
  397 + 0
  398 + ]
  399 + /Dest [
  400 + 6 0 R
  401 + /XYZ
  402 + 56.7
  403 + 773.189
  404 + 0
  405 + ]
  406 + /Rect [
  407 + 54
  408 + 545
  409 + 100
  410 + 558
  411 + ]
  412 + /Subtype /Link
  413 + /Type /Annot
  414 +>>
  415 +endobj
  416 +
  417 +%% Contents for page 2
  418 +18 0 obj
  419 +<<
  420 + /Length 19 0 R
  421 +>>
  422 +stream
  423 +0.1 w
  424 +
  425 +q 0 0 0 rg
  426 +BT
  427 +55 750 Td /F2 18 Tf (Page 2) Tj
  428 +ET
  429 +Q
  430 +
  431 +q 0 0 0.5019607843 rg
  432 +BT
  433 +55 700 Td /F2 12 Tf (Page 1) Tj
  434 +ET
  435 +Q
  436 +
  437 +q 0 0 0.5019607843 rg
  438 +BT
  439 +55 650 Td /F2 12 Tf (Page 2) Tj
  440 +ET
  441 +Q
  442 +
  443 +q 0 0 0.5019607843 rg
  444 +BT
  445 +55 600 Td /F2 12 Tf (Page 3) Tj
  446 +ET
  447 +Q
  448 +
  449 +q 0 0 0.5019607843 rg
  450 +BT
  451 +55 550 Td /F2 12 Tf (Page 4) Tj
  452 +ET
  453 +Q
  454 +endstream
  455 +endobj
  456 +
  457 +19 0 obj
  458 +314
  459 +endobj
  460 +
  461 +20 0 obj
  462 +<<
  463 + /Border [
  464 + 0
  465 + 0
  466 + 0
  467 + ]
  468 + /Dest [
  469 + 3 0 R
  470 + /XYZ
  471 + 56.7
  472 + 773.189
  473 + 0
  474 + ]
  475 + /Rect [
  476 + 54
  477 + 695
  478 + 100
  479 + 708
  480 + ]
  481 + /Subtype /Link
  482 + /Type /Annot
  483 +>>
  484 +endobj
  485 +
  486 +21 0 obj
  487 +<<
  488 + /Border [
  489 + 0
  490 + 0
  491 + 0
  492 + ]
  493 + /Dest [
  494 + 4 0 R
  495 + /XYZ
  496 + 56.7
  497 + 773.189
  498 + 0
  499 + ]
  500 + /Rect [
  501 + 54
  502 + 645
  503 + 100
  504 + 658
  505 + ]
  506 + /Subtype /Link
  507 + /Type /Annot
  508 +>>
  509 +endobj
  510 +
  511 +22 0 obj
  512 +<<
  513 + /Border [
  514 + 0
  515 + 0
  516 + 0
  517 + ]
  518 + /Dest [
  519 + 5 0 R
  520 + /XYZ
  521 + 56.7
  522 + 773.189
  523 + 0
  524 + ]
  525 + /Rect [
  526 + 54
  527 + 595
  528 + 100
  529 + 608
  530 + ]
  531 + /Subtype /Link
  532 + /Type /Annot
  533 +>>
  534 +endobj
  535 +
  536 +23 0 obj
  537 +<<
  538 + /Border [
  539 + 0
  540 + 0
  541 + 0
  542 + ]
  543 + /Dest [
  544 + 6 0 R
  545 + /XYZ
  546 + 56.7
  547 + 773.189
  548 + 0
  549 + ]
  550 + /Rect [
  551 + 54
  552 + 545
  553 + 100
  554 + 558
  555 + ]
  556 + /Subtype /Link
  557 + /Type /Annot
  558 +>>
  559 +endobj
  560 +
  561 +%% Contents for page 3
  562 +24 0 obj
  563 +<<
  564 + /Length 25 0 R
  565 +>>
  566 +stream
  567 +0.1 w
  568 +
  569 +q 0 0 0 rg
  570 +BT
  571 +55 750 Td /F2 18 Tf (Page 3) Tj
  572 +ET
  573 +Q
  574 +
  575 +q 0 0 0.5019607843 rg
  576 +BT
  577 +55 700 Td /F2 12 Tf (Page 1) Tj
  578 +ET
  579 +Q
  580 +
  581 +q 0 0 0.5019607843 rg
  582 +BT
  583 +55 650 Td /F2 12 Tf (Page 2) Tj
  584 +ET
  585 +Q
  586 +
  587 +q 0 0 0.5019607843 rg
  588 +BT
  589 +55 600 Td /F2 12 Tf (Page 3) Tj
  590 +ET
  591 +Q
  592 +
  593 +q 0 0 0.5019607843 rg
  594 +BT
  595 +55 550 Td /F2 12 Tf (Page 4) Tj
  596 +ET
  597 +Q
  598 +endstream
  599 +endobj
  600 +
  601 +25 0 obj
  602 +314
  603 +endobj
  604 +
  605 +26 0 obj
  606 +<<
  607 + /Border [
  608 + 0
  609 + 0
  610 + 0
  611 + ]
  612 + /Dest [
  613 + 3 0 R
  614 + /XYZ
  615 + 56.7
  616 + 773.189
  617 + 0
  618 + ]
  619 + /Rect [
  620 + 54
  621 + 695
  622 + 100
  623 + 708
  624 + ]
  625 + /Subtype /Link
  626 + /Type /Annot
  627 +>>
  628 +endobj
  629 +
  630 +27 0 obj
  631 +<<
  632 + /Border [
  633 + 0
  634 + 0
  635 + 0
  636 + ]
  637 + /Dest [
  638 + 4 0 R
  639 + /XYZ
  640 + 56.7
  641 + 773.189
  642 + 0
  643 + ]
  644 + /Rect [
  645 + 54
  646 + 645
  647 + 100
  648 + 658
  649 + ]
  650 + /Subtype /Link
  651 + /Type /Annot
  652 +>>
  653 +endobj
  654 +
  655 +28 0 obj
  656 +<<
  657 + /Border [
  658 + 0
  659 + 0
  660 + 0
  661 + ]
  662 + /Dest [
  663 + 5 0 R
  664 + /XYZ
  665 + 56.7
  666 + 773.189
  667 + 0
  668 + ]
  669 + /Rect [
  670 + 54
  671 + 595
  672 + 100
  673 + 608
  674 + ]
  675 + /Subtype /Link
  676 + /Type /Annot
  677 +>>
  678 +endobj
  679 +
  680 +29 0 obj
  681 +<<
  682 + /Border [
  683 + 0
  684 + 0
  685 + 0
  686 + ]
  687 + /Dest [
  688 + 6 0 R
  689 + /XYZ
  690 + 56.7
  691 + 773.189
  692 + 0
  693 + ]
  694 + /Rect [
  695 + 54
  696 + 545
  697 + 100
  698 + 558
  699 + ]
  700 + /Subtype /Link
  701 + /Type /Annot
  702 +>>
  703 +endobj
  704 +
  705 +%% Contents for page 4
  706 +30 0 obj
  707 +<<
  708 + /Length 31 0 R
  709 +>>
  710 +stream
  711 +0.1 w
  712 +
  713 +q 0 0 0 rg
  714 +BT
  715 +55 750 Td /F2 18 Tf (Page 4) Tj
  716 +ET
  717 +Q
  718 +
  719 +q 0 0 0.5019607843 rg
  720 +BT
  721 +55 700 Td /F2 12 Tf (Page 1) Tj
  722 +ET
  723 +Q
  724 +
  725 +q 0 0 0.5019607843 rg
  726 +BT
  727 +55 650 Td /F2 12 Tf (Page 2) Tj
  728 +ET
  729 +Q
  730 +
  731 +q 0 0 0.5019607843 rg
  732 +BT
  733 +55 600 Td /F2 12 Tf (Page 3) Tj
  734 +ET
  735 +Q
  736 +
  737 +q 0 0 0.5019607843 rg
  738 +BT
  739 +55 550 Td /F2 12 Tf (Page 4) Tj
  740 +ET
  741 +Q
  742 +endstream
  743 +endobj
  744 +
  745 +31 0 obj
  746 +314
  747 +endobj
  748 +
  749 +xref
  750 +0 32
  751 +0000000000 65535 f
  752 +0000000025 00000 n
  753 +0000000079 00000 n
  754 +0000000191 00000 n
  755 +0000000546 00000 n
  756 +0000000904 00000 n
  757 +0000001262 00000 n
  758 +0000001610 00000 n
  759 +0000001803 00000 n
  760 +0000001996 00000 n
  761 +0000002189 00000 n
  762 +0000002406 00000 n
  763 +0000002777 00000 n
  764 +0000002798 00000 n
  765 +0000002877 00000 n
  766 +0000003071 00000 n
  767 +0000003265 00000 n
  768 +0000003459 00000 n
  769 +0000003676 00000 n
  770 +0000004047 00000 n
  771 +0000004068 00000 n
  772 +0000004262 00000 n
  773 +0000004456 00000 n
  774 +0000004650 00000 n
  775 +0000004867 00000 n
  776 +0000005238 00000 n
  777 +0000005259 00000 n
  778 +0000005453 00000 n
  779 +0000005647 00000 n
  780 +0000005841 00000 n
  781 +0000006058 00000 n
  782 +0000006429 00000 n
  783 +trailer <<
  784 + /Root 1 0 R
  785 + /Size 32
  786 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>]
  787 +>>
  788 +startxref
  789 +6450
  790 +%%EOF
... ...